diff options
Diffstat (limited to 'lang/js')
| -rw-r--r-- | lang/js/BrowserTestExtension/browsertest.html | 3 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/index.html | 40 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/longTests.html | 22 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/popup.js | 2 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/runbrowsertest.js | 1 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/rununittests.js | 21 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/encryptDecryptTest.js | 191 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/encryptTest.js | 2 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/inputvalues.js | 119 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/tests/longRunningTests.js | 53 | ||||
| -rw-r--r-- | lang/js/BrowserTestExtension/unittests.html | 17 | ||||
| -rw-r--r-- | lang/js/src/Connection.js | 19 | 
12 files changed, 328 insertions, 162 deletions
| diff --git a/lang/js/BrowserTestExtension/browsertest.html b/lang/js/BrowserTestExtension/browsertest.html index d12e03cf..c379ef53 100644 --- a/lang/js/BrowserTestExtension/browsertest.html +++ b/lang/js/BrowserTestExtension/browsertest.html @@ -12,14 +12,11 @@      <script src="libs/chai.js"></script>      <script src="setup_testing.js"></script>      <script src="libs/gpgmejs.bundle.js"></script> -      <script src="tests/inputvalues.js"></script> -    <script src="libs/gpgmejs_unittests.bundle.js"></script>  <!-- insert tests here-->      <script src="tests/startup.js"></script>      <script src="tests/encryptTest.js"></script>      <script src="tests/encryptDecryptTest.js"></script> -  <!-- run tests -->      <script src="runbrowsertest.js"></script>      </body> diff --git a/lang/js/BrowserTestExtension/index.html b/lang/js/BrowserTestExtension/index.html new file mode 100644 index 00000000..05d413ba --- /dev/null +++ b/lang/js/BrowserTestExtension/index.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html> +    <head> +        <meta charset="utf-8"> +        <link href="libs/mocha.css" rel="stylesheet" /> +    </head> +<body> +    <h3>gpgmejs - Tests</h3> +    <p> +        The unittests rely on a separately packaged version of gpgmejs, +        with the different classes and functions exposed. These tests and their +        input values can be found in gpgme/lang/js/test. They do not test the +        overall functionality, but the individual behaviour of the components. +        <ul> +            <li> +                <a href="unittests.html"> +                    Unittests of the individual functions and classes. +                </a> +            </li> +        </ul> +    </p> +    <p> +        The functionality tests, to be found in +        gpgme/lang/js/BrowserTestExtension, check the overall functionality of +        the standard  packaged version of gpgmejs. +        <ul> +            <li> +                <a href="browsertest.html"> +                    Functionality tests using the bundled library. +                </a> +            </li> +            <li> +                <a href="longTests.html"> +                    Functionality tests with larger/longer running data sets. +                </a> +            </li> +        </ul> +        </p> +    </body> +</html> diff --git a/lang/js/BrowserTestExtension/longTests.html b/lang/js/BrowserTestExtension/longTests.html new file mode 100644 index 00000000..8ff969b7 --- /dev/null +++ b/lang/js/BrowserTestExtension/longTests.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +    <head> +        <meta charset="utf-8"> +        <link href="libs/mocha.css" rel="stylesheet" /> +    </head> +<body> +    <h3>Browsertest</h3> +    <div id="mocha"></div> +    <!-- load unit tests --> +    <script src="libs/mocha.js"></script> +    <script src="libs/chai.js"></script> +    <script src="setup_testing.js"></script> +    <script src="libs/gpgmejs.bundle.js"></script> +    <script src="tests/inputvalues.js"></script> +<!-- insert tests here--> +    <script src="tests/startup.js"></script> +    <script src="tests/longRunningTests.js"></script> +<!-- run tests --> +    <script src="runbrowsertest.js"></script> +    </body> +</html> diff --git a/lang/js/BrowserTestExtension/popup.js b/lang/js/BrowserTestExtension/popup.js index 4764df55..12beb1eb 100644 --- a/lang/js/BrowserTestExtension/popup.js +++ b/lang/js/BrowserTestExtension/popup.js @@ -39,6 +39,6 @@  document.addEventListener('DOMContentLoaded', function() {      chrome.tabs.create({ -        url: './browsertest.html' +        url: './index.html'      });  }); diff --git a/lang/js/BrowserTestExtension/runbrowsertest.js b/lang/js/BrowserTestExtension/runbrowsertest.js index 308c716d..39bc3fb9 100644 --- a/lang/js/BrowserTestExtension/runbrowsertest.js +++ b/lang/js/BrowserTestExtension/runbrowsertest.js @@ -19,4 +19,3 @@   */  mocha.run(); -Gpgmejs_test.unittests(); diff --git a/lang/js/BrowserTestExtension/rununittests.js b/lang/js/BrowserTestExtension/rununittests.js new file mode 100644 index 00000000..f85ed8b5 --- /dev/null +++ b/lang/js/BrowserTestExtension/rununittests.js @@ -0,0 +1,21 @@ +/* gpgme.js - Javascript integration for gpgme + * Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik + * + * This file is part of GPGME. + * + * GPGME is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * GPGME is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see <http://www.gnu.org/licenses/>. + * SPDX-License-Identifier: LGPL-2.1+ + */ +Gpgmejs_test.unittests(); +mocha.run(); diff --git a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js index e28dd66b..a66e1534 100644 --- a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js +++ b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js @@ -19,7 +19,7 @@   */  describe('Encryption and Decryption', function () { -    it('Successful encrypt and decrypt', function (done) { +    it('Successful encrypt and decrypt simple string', function (done) {          let prm = Gpgmejs.init();          prm.then(function (context) {              context.encrypt( @@ -39,54 +39,6 @@ describe('Encryption and Decryption', function () {                  });          });      }); - -    /** -     * Fails with random data! Some bytes (up to 100) of the original are missing in -     * the result -*/ -/** -    for (let j = 0; j < 10; j++){ -    it('Successful encrypt and decrypt specific sets: ', -            function (done) { -                let prm = Gpgmejs.init(); -                let data = bigBoringString(5); //see ./inputvalues.js -                expect(Object.prototype.toString.call(data)).to.equal("[object String]"); -                prm.then(function (context) { -                    context.encrypt(data, -                        inputvalues.encrypt.good.fingerprint).then( -                        function (answer) { -                            expect(answer).to.not.be.empty; -                            expect(answer.data).to.be.a("string"); -                            expect(answer.data).to.include( -                                'BEGIN PGP MESSAGE'); -                            expect(answer.data).to.include( -                                'END PGP MESSAGE'); -                            context.decrypt(answer.data).then( -                                function (result) { -                                    if (data.length !== result.data.length) { - -                                        for (let k = 0; k < data.length; k++) { -                                            if (data[k] !== result.data[k]) { -                                                console.log(k); -                                                console.log(data[k - 2] + data[k - 1] + data[k] + data[k + 1]); -                                                console.log(result.data[k - 2] + result.data[k - 1] + result.data[k] + result.data[k + 1]); -                                                break; -                                            } -                                        } -                                    } -                                    expect(result).to.not.be.empty; -                                    expect(result.data).to.be.a('string'); -                                    expect(result.data).to.equal(data); -                                    context.connection.disconnect(); -                                    done(); - -                                }); -                        }); -                }); -            }).timeout(5000); -        } - -      it('Roundtrip does not destroy trailing whitespace',          function (done) {              let prm = Gpgmejs.init(); @@ -112,88 +64,22 @@ describe('Encryption and Decryption', function () {                              });                      });              }); -        }).timeout(3000); - -    it('Test with simple non-ascii input', -        function (done) { -            let prm = Gpgmejs.init(); -            prm.then(function (context) { -                let data = ''; -                for (let i=0; i < 1024 * 1024 * 0.1; i++){ -                    data += inputvalues.encrypt.good.data_nonascii; -                } -                context.encrypt(data, -                    inputvalues.encrypt.good.fingerprint).then( -                    function (answer) { -                        expect(answer).to.not.be.empty; -                        expect(answer.data).to.be.a("string"); -                        expect(answer.data).to.include( -                            'BEGIN PGP MESSAGE'); -                        expect(answer.data).to.include( -                            'END PGP MESSAGE'); -                        console.log(answer); -                        context.decrypt(answer.data).then( -                            function (result) { -                                expect(result).to.not.be.empty; -                                expect(result.data).to.be.a('string'); -                                if (data.length !== result.data.length) { - -                                    for (let k = 0; k < data.length; k++) { -                                        if (data[k] !== result.data[k]) { -                                            console.log(k); -                                            console.log(data[k - 2] + data[k - 1] + data[k] + data[k + 1]); -                                            console.log(result.data[k - 2] + result.data[k - 1] + result.data[k] + result.data[k + 1]); -                                            break; -                                        } -                                    } -                                } -                                console.log(data.length - result.data.length); -                                expect(result.data).to.equal(data); -                                context.connection.disconnect(); -                                done(); +        }).timeout(5000); -                            }); -                    }); -            }); -        }).timeout(3000); -*/ -/** -    for (let i=0; i< 100; i++) { -        it('Successful encrypt random data '+ (i+1) + '/100', function (done) { -            let prm = Gpgmejs.init(); -            let data = bigString(0.2); // << set source data here +    for (let j = 0; j < inputvalues.encrypt.good.data_nonascii_32.length; j++){ +        it('Roundtrip with >1MB non-ascii input meeting default chunksize (' + (j + 1) + '/' + inputvalues.encrypt.good.data_nonascii_32.length + ')', +            function (done) { +                let input = inputvalues.encrypt.good.data_nonascii_32[j]; +                expect(input).to.have.length(32); +                let prm = Gpgmejs.init();                  prm.then(function (context) { +                    let data = ''; +                    for (let i=0; i < 34 * 1024; i++){ +                        data += input; +                    }                      context.encrypt(data,                          inputvalues.encrypt.good.fingerprint).then( -                            function (answer){ -                                expect(answer).to.not.be.empty; -                                expect(answer.data).to.be.a("string"); -                                expect(answer.data).to.include( -                                    'BEGIN PGP MESSAGE'); -                                expect(answer.data).to.include( -                                    'END PGP MESSAGE'); -                                context.decrypt(answer.data).then( -                                    function(result){ -                                        expect(result).to.not.be.empty; -                                        expect(result.data).to.be.a('string'); -                                        expect(result.data).to.equal(data); -                                        context.connection.disconnect(); -                                        done(); -                                }); -                        }); -                }); -        }).timeout(5000); -    }; -*/ - -/** still fails -    it('Successful encrypt 0.8 MB Uint8Array', function (done) { -        let prm = Gpgmejs.init(); -        let data = bigUint8(0.8); -        prm.then(function (context) { -                context.encrypt(data, -                    inputvalues.encrypt.good.fingerprint).then( -                        function (answer){ +                        function (answer) {                              expect(answer).to.not.be.empty;                              expect(answer.data).to.be.a("string");                              expect(answer.data).to.include( @@ -201,38 +87,39 @@ describe('Encryption and Decryption', function () {                              expect(answer.data).to.include(                                  'END PGP MESSAGE');                              context.decrypt(answer.data).then( -                                function(result){ +                                function (result) {                                      expect(result).to.not.be.empty;                                      expect(result.data).to.be.a('string');                                      expect(result.data).to.equal(data); -                                    done(); -                            }); -                    }); -            }); -    }).timeout(5000); -*/ - -    it('Decrypt simple non-ascii', -        function (done) { -            let prm = Gpgmejs.init(); -            prm.then(function (context) { -                data = encryptedData; -                context.decrypt(data).then( -                    function (result) { -                        expect(result).to.not.be.empty; -                        expect(result.data).to.be.a('string'); -                        expect(result.data).to.equal(inputvalues.encrypt.good.data_nonascii); -                        context.encrypt(inputvalues.encrypt.good.data_nonascii, inputvalues.encrypt.good.fingerprint).then( -                            function(result){ -                                context.decrypt(result.data).then(function(answer){ -                                    expect(answer.data).to.equal(inputvalues.encrypt.good.data_nonascii);                                      context.connection.disconnect();                                      done();                                  }); +                        }); +                }); +        }).timeout(5000); +    }; + +    it('Encrypt-decrypt simple non-ascii', function (done) { +        //FAILS TODO: Check newline at the end +        let prm = Gpgmejs.init(); +        prm.then(function (context) { +            data = encryptedData; +            context.decrypt(data).then( +                function (result) { +                    expect(result).to.not.be.empty; +                    expect(result.data).to.be.a('string'); +                    expect(result.data).to.equal(inputvalues.encrypt.good.data_nonascii); +                    context.encrypt(inputvalues.encrypt.good.data_nonascii, inputvalues.encrypt.good.fingerprint).then( +                        function(result){ +                            context.decrypt(result.data).then(function(answer){ +                                expect(answer.data).to.equal('¡Äußerste µ€ før ñoquis@hóme! Добрый день'); +                                context.connection.disconnect(); +                                done();                              });                          }); +                    }); -            }); -    }).timeout(8000); +        }); +    }).timeout(6000); -});
\ No newline at end of file +}); diff --git a/lang/js/BrowserTestExtension/tests/encryptTest.js b/lang/js/BrowserTestExtension/tests/encryptTest.js index 2e95151b..5ef68a32 100644 --- a/lang/js/BrowserTestExtension/tests/encryptTest.js +++ b/lang/js/BrowserTestExtension/tests/encryptTest.js @@ -49,7 +49,7 @@ describe('Encryption', function () {                      done();                  });          }); -    }).timeout(5000); +    }).timeout(10000);  /**      it('Successful encrypt 20 MB', function (done) { diff --git a/lang/js/BrowserTestExtension/tests/inputvalues.js b/lang/js/BrowserTestExtension/tests/inputvalues.js index bc8c97bb..e23b7786 100644 --- a/lang/js/BrowserTestExtension/tests/inputvalues.js +++ b/lang/js/BrowserTestExtension/tests/inputvalues.js @@ -23,7 +23,23 @@ var inputvalues = {          good:{              data : 'Hello World.',              fingerprint : 'D41735B91236FDB882048C5A2301635EEFF0CB05', -            data_nonascii: '¡Äußerste µ€ før ñoquis@hóme! Добрый день\n' +            data_nonascii: '¡Äußerste µ€ før ñoquis@hóme! Добрый день', +            data_nonascii_32: [ +                'K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€', +                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€', //fails result has 3 chars more +                '€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€', //fails 3 chars +                '²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³', +                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€A€µ€µ€µ€µ€', //fails 2 chars +                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µAµ€µ€µ€µ€', //is okay if 2 chunksizes. +                'üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü', +                'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€', +                'µAAAAµAAAAAAAAAAAAAAAAAAAAAAAAA€', +                'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAµ€', +                'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA°', +                '€AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€', +                'µ||||||||||||||||||||||||||||||€', +                'æſæſ³¼„¬“³³¬“¬½”æſæſ³¼„¬“³³¬“¬½”' +            ]          },          bad: {              fingerprint: 'CDC3A2B2860625CCBFC5AAAAAC6D1B604967FC4A' @@ -56,7 +72,7 @@ function bigUint8(megabytes){  function bigBoringString(megabytes){      let maxlength = 1024 * 1024 * megabytes;      let string = ''; -    let chars = ' ä0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +    let chars = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';      for (let i= 0; i < maxlength; i++){          string = string + chars[Math.floor(Math.random() * chars.length)];      } @@ -101,4 +117,101 @@ var encryptedData =      'isGL7jOlDCBKwep67ted0cTRPLWkk3NSuLIlvD5xs6L4z3rPu92gXYgbZoMMdP0N\n' +      'kSAQYOHplfA7YJWkrlRm\n' +      '=zap6\n' + -    '-----END PGP MESSAGE-----\n';
\ No newline at end of file +    '-----END PGP MESSAGE-----\n'; +var encryptedBroken = '-----BEGIN PGP MESSAGE-----\n' + +'\n' + +'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\n' + +'E14StpggdK8=\n' + +'=enm3\n' + +'-----END PGP MESSAGE-----\n';
\ No newline at end of file diff --git a/lang/js/BrowserTestExtension/tests/longRunningTests.js b/lang/js/BrowserTestExtension/tests/longRunningTests.js new file mode 100644 index 00000000..0f32ca92 --- /dev/null +++ b/lang/js/BrowserTestExtension/tests/longRunningTests.js @@ -0,0 +1,53 @@ +describe('Long running Encryption/Decryption', function () { +    for (let i=0; i< 100; i++) { +        it('Successful encrypt/decrypt completely random data ' + (i+1) + '/100', function (done) { +            let prm = Gpgmejs.init(); +            let data = bigString(2); +                prm.then(function (context) { +                    context.encrypt(data, +                        inputvalues.encrypt.good.fingerprint).then( +                            function (answer){ +                                expect(answer).to.not.be.empty; +                                expect(answer.data).to.be.a("string"); +                                expect(answer.data).to.include( +                                    'BEGIN PGP MESSAGE'); +                                expect(answer.data).to.include( +                                    'END PGP MESSAGE'); +                                context.decrypt(answer.data).then( +                                    function(result){ +                                        expect(result).to.not.be.empty; +                                        expect(result.data).to.be.a('string'); +                                        expect(result.data).to.equal(data); +                                        context.connection.disconnect(); +                                        done(); +                                }); +                        }); +                }); +        }).timeout(5000); +    }; + +    it('Successful encrypt 1 MB Uint8Array', function (done) { +        let prm = Gpgmejs.init(); +        let data = bigUint8(1); +        prm.then(function (context) { +                context.encrypt(data, +                    inputvalues.encrypt.good.fingerprint).then( +                        function (answer){ +                            expect(answer).to.not.be.empty; +                            expect(answer.data).to.be.a("string"); +                            expect(answer.data).to.include( +                                'BEGIN PGP MESSAGE'); +                            expect(answer.data).to.include( +                                'END PGP MESSAGE'); +                            context.decrypt(answer.data).then( +                                function(result){ +                                    expect(result).to.not.be.empty; +                                    expect(result.data).to.be.a('string'); +                                    expect(result.data).to.equal(data); +                                    done(); +                            }); +                    }); +            }); +    }).timeout(5000); + +}); diff --git a/lang/js/BrowserTestExtension/unittests.html b/lang/js/BrowserTestExtension/unittests.html new file mode 100644 index 00000000..6f7da3f1 --- /dev/null +++ b/lang/js/BrowserTestExtension/unittests.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html> +    <head> +        <meta charset="utf-8"> +        <link href="libs/mocha.css" rel="stylesheet" /> + +    </head> +<body> +    <h3>Unit tests</h3> +    <div id="mocha"></div> +    <script src="libs/mocha.js"></script> +    <script src="libs/chai.js"></script> +    <script src="setup_testing.js"></script> +    <script src="libs/gpgmejs_unittests.bundle.js"></script> +    <script src="rununittests.js"></script> +    </body> +</html> diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js index 2c8792d6..64621f60 100644 --- a/lang/js/src/Connection.js +++ b/lang/js/src/Connection.js @@ -181,7 +181,8 @@ class Answer{                          if (!this._response.hasOwnProperty(key)){                              this._response[key] = '';                          } -                        this._response[key] = this._response[key].concat(msg[key]); +                        // console.log(msg[key]); +                        this._response[key] += msg[key];                      }                      //params should not change through the message                      else if (poa.params.indexOf(key) >= 0){ @@ -214,6 +215,22 @@ class Answer{       * TODO: does not care yet if completed.       */      get message(){ +        let keys = Object.keys(this._response); +        let poa = permittedOperations[this.operation].answer; +        for (let i=0; i < keys.length; i++) { +            if (poa.data.indexOf(keys[i]) >= 0){ +                if (this._response.base64 == true){ +                    let respatob =  atob(this._response[keys[i]]); + +                    let result = decodeURIComponent( +                        respatob.split('').map(function(c) { +                            return '%' + +                            ('00' + c.charCodeAt(0).toString(16)).slice(-2); +                        }).join('')); +                    this._response[keys[i]] = result; +                } +            } +        }          return this._response;      }  } | 
