// Copyright 2018 AJ ONeal. All rights reserved /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 'use strict'; /* -----BEGIN CERTIFICATE-----LF xxxLF yyyLF -----END CERTIFICATE-----LF LF -----BEGIN CERTIFICATE-----LF xxxLF yyyLF -----END CERTIFICATE-----LF Rules * Only Unix LF (\n) Line endings * Each PEM's lines are separated with \n * Each PEM ends with \n * Each PEM is separated with a \n (just like commas separating an array) */ // https://github.com/certbot/certbot/issues/5721#issuecomment-402362709 var expected = '----\nxxxx\nyyyy\n----\n\n----\nxxxx\nyyyy\n----\n'; var tests = [ '----\r\nxxxx\r\nyyyy\r\n----\r\n\r\n----\r\nxxxx\r\nyyyy\r\n----\r\n', '----\r\nxxxx\r\nyyyy\r\n----\r\n----\r\nxxxx\r\nyyyy\r\n----\r\n', '----\nxxxx\nyyyy\n----\n\n----\r\nxxxx\r\nyyyy\r\n----', '----\nxxxx\nyyyy\n----\n----\r\nxxxx\r\nyyyy\r\n----', '----\nxxxx\nyyyy\n----\n----\nxxxx\nyyyy\n----', '----\nxxxx\nyyyy\n----\n----\nxxxx\nyyyy\n----\n', '----\nxxxx\nyyyy\n----\n\n----\nxxxx\nyyyy\n----\n', '----\nxxxx\nyyyy\n----\r\n----\nxxxx\ryyyy\n----\n' ]; var ACME = require('../'); module.exports = function () { console.info('\n[Test] can split and format PEM chain properly'); tests.forEach(function (str) { var actual = ACME.formatPemChain(str); if (expected !== actual) { console.error('input: ', JSON.stringify(str)); console.error('expected:', JSON.stringify(expected)); console.error('actual: ', JSON.stringify(actual)); throw new Error('did not pass'); } }); if ( '----\nxxxx\nyyyy\n----\n' !== ACME.formatPemChain('\n\n----\r\nxxxx\r\nyyyy\r\n----\n\n') ) { throw new Error('Not proper for single cert in chain'); } if ( '--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n' !== ACME.formatPemChain( '\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n--B--\nxxxx\nyyyy\n--E--\n\n\n' ) ) { throw new Error('Not proper for three certs in chain'); } ACME.splitPemChain( '--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n\n--B--\nxxxx\nyyyy\n--E--\n' ).forEach(function (str) { if ('--B--\nxxxx\nyyyy\n--E--\n' !== str) { throw new Error('bad thingy'); } }); console.info('PASS'); return Promise.resolve(); };