a242af5f16e02dba0cd34029d83a633d83843b94
[gpgme.git] / lang / js / BrowserTestExtension / tests / encryptTest.js
1 /* gpgme.js - Javascript integration for gpgme
2  * Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * GPGME is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  * SPDX-License-Identifier: LGPL-2.1+
19  *
20  * Author(s):
21  *     Maximilian Krambach <mkrambach@intevation.de>
22  */
23
24 /* global describe, it, expect, before, Gpgmejs */
25 /* global inputvalues, fixedLengthString */
26
27 describe('Encryption', function () {
28     let context = null;
29     const good_fpr = inputvalues.encrypt.good.fingerprint;
30     before(function (done){
31         const prm = Gpgmejs.init();
32         prm.then(function (gpgmejs){
33             context = gpgmejs;
34             done();
35         });
36     });
37
38     it('Successful encrypt', function (done) {
39         const data = inputvalues.encrypt.good.data;
40         context.encrypt(data, good_fpr).then(function (answer) {
41             expect(answer).to.not.be.empty;
42             expect(answer.data).to.be.a('string');
43             expect(answer.data).to.include('BEGIN PGP MESSAGE');
44             expect(answer.data).to.include('END PGP MESSAGE');
45             done();
46         });
47     });
48
49     const sizes = [5,20,50];
50     for (let i=0; i < sizes.length; i++) {
51         it('Successful encrypt a ' + sizes[i] + 'MB message', function (done) {
52             const data = fixedLengthString(sizes[i]);
53             context.encrypt(data, good_fpr).then(function (answer) {
54                 expect(answer).to.not.be.empty;
55                 expect(answer.data).to.be.a('string');
56                 expect(answer.data).to.include('BEGIN PGP MESSAGE');
57                 expect(answer.data).to.include('END PGP MESSAGE');
58                 done();
59             });
60         }).timeout(20000);
61     }
62
63     it('Sending encryption without keys fails', function (done) {
64         const data = inputvalues.encrypt.good.data;
65         context.encrypt(data,null).then(function (answer) {
66             expect(answer).to.be.undefined;
67         }, function (error){
68             expect(error).to.be.an('Error');
69             expect(error.code).to.equal('MSG_INCOMPLETE');
70             done();
71         });
72     });
73
74     it('Sending encryption without data fails', function (done) {
75         context.encrypt(null, good_fpr).then(function (answer) {
76             expect(answer).to.be.undefined;
77         }, function (error) {
78             expect(error).to.be.an.instanceof(Error);
79             expect(error.code).to.equal('MSG_INCOMPLETE');
80             done();
81         });
82     });
83
84     it('Sending encryption with non existing keys fails', function (done) {
85         const data = inputvalues.encrypt.good.data;
86         const bad_fpr = inputvalues.encrypt.bad.fingerprint;
87         context.encrypt(data, bad_fpr).then(function (answer) {
88             expect(answer).to.be.undefined;
89         }, function (error){
90             expect(error).to.be.an('Error');
91             expect(error.code).to.not.be.undefined;
92             expect(error.code).to.equal('GNUPG_ERROR');
93             done();
94         });
95     }).timeout(5000);
96
97     it('Overly large message ( > 64MB) is rejected', function (done) {
98         const data = fixedLengthString(65);
99         context.encrypt(data, good_fpr).then(function (answer) {
100             expect(answer).to.be.undefined;
101         }, function (error){
102             expect(error).to.be.an.instanceof(Error);
103             // TODO: there is a 64 MB hard limit at least in chrome at:
104             // chromium//extensions/renderer/messaging_util.cc:
105             // kMaxMessageLength
106             // The error will be a browser error, not from gnupg or from
107             // this library
108             done();
109         });
110     }).timeout(8000);
111
112     // TODO check different valid parameter
113 });