From 12c8d505c49b8b999660c52872a66071a9abc4c6 Mon Sep 17 00:00:00 2001 From: Alex Shatov Date: Tue, 5 Feb 2019 13:03:53 -0500 Subject: 3.2.0/5.2.0 - fixed zip folder bug by admzip lib - external version 3.2.0 - internal version 5.2.0 for code change - no API change - fixed the zip folder bug when sending the blueprint to cloudify = this bug was preventing the opening of the blueprint in cloudify UI because the folder record was not properly formatted by admzip lib 0.4.7 - upgraded adm-zip lib to the latest version 0.4.13 - unit tested the zipping of the blueprint file under subfolder without having the subfolder record in zip = manual unzip in linux shows proper subfolder/file structure = automatic unzip is not supported by the old ubuntu = would need upgrading the node.js/ubuntu and installing unzip for proper testing - see code comments in unit-test - zip file created by admzip unzips properly both in linux and in Windows = zip still has some header warnings, but not critical unit test coverage summary Statements : 80.94% ( 943/1165 ) Branches : 58.22% ( 294/505 ) Functions : 81.28% ( 165/203 ) Lines : 81.48% ( 933/1145 ) Change-Id: I48e44f025c21ef51de5a7422c8db9433581c787f Signed-off-by: Alex Shatov Issue-ID: DCAEGEN2-855 --- tests/mock_deployment_handler.js | 8 +++++-- tests/test_dcae-deployments.js | 51 +++++++++++++++++++++++++--------------- tests/test_policy.js | 7 +++--- 3 files changed, 41 insertions(+), 25 deletions(-) (limited to 'tests') diff --git a/tests/mock_deployment_handler.js b/tests/mock_deployment_handler.js index 7407e55..5ed1985 100644 --- a/tests/mock_deployment_handler.js +++ b/tests/mock_deployment_handler.js @@ -1,5 +1,5 @@ /* -Copyright(c) 2018 AT&T Intellectual Property. All rights reserved. +Copyright(c) 2018-2019 AT&T Intellectual Property. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,12 @@ const nock = require('nock'); const utils = require('./mock_utils'); const MAIN_PATH = './../'; +const LOG_PATH = './log/'; const CONSUL_URL = 'http://consul:8500'; const MOCK_CLOUDIFY_MANAGER = "mock_cloudify_manager"; const CLOUDIFY_URL = "http://" + MOCK_CLOUDIFY_MANAGER + ":80"; +const CLOUDIFY_API = "/api/v2.1"; const MOCK_INVENTORY = "mock_inventory"; const INVENTORY_URL = "https://" + MOCK_INVENTORY + ":8080"; @@ -45,7 +47,7 @@ nock(CONSUL_URL).persist().get('/v1/catalog/service/cloudify_manager') "NodeMeta":{}, "ServiceID":"cloudify_manager", "ServiceName":"cloudify_manager", - "ServiceTags":["http://" + MOCK_CLOUDIFY_MANAGER + "/api/v2.1"], + "ServiceTags":["http://" + MOCK_CLOUDIFY_MANAGER + CLOUDIFY_API], "ServiceAddress": MOCK_CLOUDIFY_MANAGER, "ServicePort":80, "ServiceEnableTagOverride":false, @@ -99,5 +101,7 @@ const run_dh = function() { module.exports.INVENTORY_URL = INVENTORY_URL; module.exports.CLOUDIFY_URL = CLOUDIFY_URL; +module.exports.CLOUDIFY_API = CLOUDIFY_API; +module.exports.LOG_PATH = LOG_PATH; module.exports.add_tests = function(new_tests) {Array.prototype.push.apply(tests, new_tests);}; module.exports.run_dh = run_dh; diff --git a/tests/test_dcae-deployments.js b/tests/test_dcae-deployments.js index 7bf9831..2f3f7fd 100644 --- a/tests/test_dcae-deployments.js +++ b/tests/test_dcae-deployments.js @@ -1,5 +1,5 @@ /* -Copyright(c) 2018 AT&T Intellectual Property. All rights reserved. +Copyright(c) 2018-2019 AT&T Intellectual Property. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,8 @@ See the License for the specific language governing permissions and limitations "use strict"; +const fs = require("fs"); + const nock = require('nock') , chai = require('chai') , chaiHttp = require('chai-http') @@ -354,7 +356,7 @@ function test_put_dcae_deployments_missing_input_error(dh_server) { return ""; }); - nock(dh.CLOUDIFY_URL).put("/api/v2.1/blueprints/" + DEPLOYMENT_ID_JFL) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/blueprints/" + DEPLOYMENT_ID_JFL) .reply(200, function(uri, requestBody) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_blueprint(DEPLOYMENT_ID_JFL)); @@ -365,7 +367,7 @@ function test_put_dcae_deployments_missing_input_error(dh_server) { "error_code": "missing_required_deployment_input_error", "server_traceback": "Traceback blah..." }; - nock(dh.CLOUDIFY_URL).put("/api/v2.1/deployments/" + DEPLOYMENT_ID_JFL) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/deployments/" + DEPLOYMENT_ID_JFL) .reply(400, function(uri) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri); return JSON.stringify(depl_rejected); @@ -411,19 +413,19 @@ function test_put_dcae_deployments_creation_failed(dh_server) { return JSON.stringify(Inventory.resp_put_service(DEPLOYMENT_ID_JFL_1, INV_EXISTING_SERVICE_TYPE)); }); - nock(dh.CLOUDIFY_URL).put("/api/v2.1/blueprints/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/blueprints/" + DEPLOYMENT_ID_JFL_1) .reply(200, function(uri, requestBody) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_blueprint(DEPLOYMENT_ID_JFL_1)); }); - nock(dh.CLOUDIFY_URL).put("/api/v2.1/deployments/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/deployments/" + DEPLOYMENT_ID_JFL_1) .reply(201, function(uri, requestBody) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_deploy(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, message.inputs)); }); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/executions?deployment_id=" + DEPLOYMENT_ID_JFL_1 + "&workflow_id=create_deployment_environment&_include=id,status") + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/executions?deployment_id=" + DEPLOYMENT_ID_JFL_1 + "&workflow_id=create_deployment_environment&_include=id,status") .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_dep_creation(DEPLOYMENT_ID_JFL_1, execution_id, "failed")); @@ -471,37 +473,37 @@ function test_put_dcae_deployments_success(dh_server) { return JSON.stringify(Inventory.resp_put_service(DEPLOYMENT_ID_JFL_1, INV_EXISTING_SERVICE_TYPE)); }); - nock(dh.CLOUDIFY_URL).put("/api/v2.1/blueprints/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/blueprints/" + DEPLOYMENT_ID_JFL_1) .reply(200, function(uri, requestBody) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_blueprint(DEPLOYMENT_ID_JFL_1)); }); - nock(dh.CLOUDIFY_URL).put("/api/v2.1/deployments/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).put(dh.CLOUDIFY_API + "/deployments/" + DEPLOYMENT_ID_JFL_1) .reply(201, function(uri, requestBody) { console.log(action_timer.step, "put", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_deploy(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, message.inputs)); }); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/executions?deployment_id=" + DEPLOYMENT_ID_JFL_1 + "&workflow_id=create_deployment_environment&_include=id,status") + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/executions?deployment_id=" + DEPLOYMENT_ID_JFL_1 + "&workflow_id=create_deployment_environment&_include=id,status") .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_dep_creation(DEPLOYMENT_ID_JFL_1, execution_id)); }); - nock(dh.CLOUDIFY_URL).post("/api/v2.1/executions") + nock(dh.CLOUDIFY_URL).post(dh.CLOUDIFY_API + "/executions") .reply(201, function(uri, requestBody) { console.log(action_timer.step, "post", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_execution(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, execution_id)); }); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/executions/" + execution_id) + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/executions/" + execution_id) .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_execution(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, execution_id, true)); }); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/deployments/" + DEPLOYMENT_ID_JFL_1 + "/outputs") + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/deployments/" + DEPLOYMENT_ID_JFL_1 + "/outputs") .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_outputs(DEPLOYMENT_ID_JFL_1)); @@ -536,7 +538,7 @@ function test_get_dcae_deployments_operation(dh_server) { it('Get operation execution succeeded', function() { const action_timer = new utils.ActionTimer(); console.log(action_timer.step, test_txt); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/executions/" + execution_id) + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/executions/" + execution_id) .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_execution(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, execution_id, true)); @@ -600,7 +602,7 @@ function test_delete_dcae_deployments_success(dh_server) { const action_timer = new utils.ActionTimer(); console.log(action_timer.step, test_txt); - nock(dh.CLOUDIFY_URL).post("/api/v2.1/executions") + nock(dh.CLOUDIFY_URL).post(dh.CLOUDIFY_API + "/executions") .reply(201, function(uri, requestBody) { console.log(action_timer.step, "post", dh.CLOUDIFY_URL, uri, JSON.stringify(requestBody)); return JSON.stringify(Cloudify.resp_execution(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, @@ -613,20 +615,20 @@ function test_delete_dcae_deployments_success(dh_server) { return ""; }); - nock(dh.CLOUDIFY_URL).get("/api/v2.1/executions/" + execution_id) + nock(dh.CLOUDIFY_URL).get(dh.CLOUDIFY_API + "/executions/" + execution_id) .reply(200, function(uri) { console.log(action_timer.step, "get", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_execution(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1, execution_id, true, workflow_id)); }); - nock(dh.CLOUDIFY_URL).delete("/api/v2.1/deployments/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).delete(dh.CLOUDIFY_API + "/deployments/" + DEPLOYMENT_ID_JFL_1) .reply(201, function(uri) { console.log(action_timer.step, "delete", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_deploy(DEPLOYMENT_ID_JFL_1, DEPLOYMENT_ID_JFL_1)); }); - nock(dh.CLOUDIFY_URL).delete("/api/v2.1/blueprints/" + DEPLOYMENT_ID_JFL_1) + nock(dh.CLOUDIFY_URL).delete(dh.CLOUDIFY_API + "/blueprints/" + DEPLOYMENT_ID_JFL_1) .reply(200, function(uri) { console.log(action_timer.step, "delete", dh.CLOUDIFY_URL, uri); return JSON.stringify(Cloudify.resp_blueprint(DEPLOYMENT_ID_JFL_1)); @@ -667,10 +669,21 @@ function test_zipper(dh_server) { for (var i=0; i< 100; i++) { blueprint = blueprint + (i % 10); try { + const zip_folder = "zip_blueprint_" + ('0' + i).substr(-2); + const zip_path = dh.LOG_PATH + zip_folder + ".zip"; + const zip = new admzip(); - zip.addFile('work/', new Buffer(0)); - zip.addFile('work/blueprint.yaml', new Buffer(blueprint, 'utf8')); + // no need for separate folder entry like 'work/' in zip + // zip file created by admzip unzips properly in linux, but not in Windows :-( + zip.addFile(zip_folder + '/blueprint.yaml', Buffer.from(blueprint, 'utf8')); const zip_buffer = zip.toBuffer(); + fs.writeFileSync(zip_path, zip_buffer); + + // gave up on unzipping in old ubuntu that fails to have unzip installed + // uncomment the next lines if you have unzip in os to properly test + // execSync('unzip ' + zip_folder + ".zip", {"cwd": dh.LOG_PATH}); + // const bp_from_file = fs.readFileSync(dh.LOG_PATH + zip_folder + '/blueprint.yaml').toString('utf8'); + // expect(bp_from_file).to.be.equal(blueprint); success_blueprints.push(blueprint); } catch (e) { // TypeError diff --git a/tests/test_policy.js b/tests/test_policy.js index 32e5ed4..468ac2b 100644 --- a/tests/test_policy.js +++ b/tests/test_policy.js @@ -1,5 +1,5 @@ /* -Copyright(c) 2017-2018 AT&T Intellectual Property. All rights reserved. +Copyright(c) 2017-2019 AT&T Intellectual Property. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -52,9 +52,8 @@ const MONKEYED_POLICY_ID_5 = "DCAE_alex.Config_peach_5"; const MONKEYED_POLICY_ID_6 = "DCAE_alex.Config_peach_6"; const CLAMP_POLICY_ID = "CLAMP.Config_clamp_policy"; -const CFY_API = "/api/v2.1"; -const CFY_API_NODE_INSTANCES = CFY_API + "/node-instances"; -const CFY_API_EXECUTIONS = CFY_API + "/executions"; +const CFY_API_NODE_INSTANCES = dh.CLOUDIFY_API + "/node-instances"; +const CFY_API_EXECUTIONS = dh.CLOUDIFY_API + "/executions"; const CFY_API_EXECUTION = CFY_API_EXECUTIONS + "/"; function create_policy_body(policy_id, policy_version=1, matching_conditions=null) { -- cgit 1.2.3-korg