1 /* Copyright (c) 2019 AT&T Intellectual Property. #
\r
3 # Licensed under the Apache License, Version 2.0 (the "License"); #
\r
4 # you may not use this file except in compliance with the License. #
\r
5 # You may obtain a copy of the License at #
\r
7 # http://www.apache.org/licenses/LICENSE-2.0 #
\r
9 # Unless required by applicable law or agreed to in writing, software #
\r
10 # distributed under the License is distributed on an "AS IS" BASIS, #
\r
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
\r
12 # See the License for the specific language governing permissions and #
\r
13 # limitations under the License. #
\r
14 ##############################################################################*/
\r
17 const axios = require('axios');
\r
18 const pickleRick = require('pickle-rick');
\r
19 const Response = require('http-response-object');
\r
20 const logger = require('../../../lib/logger');
\r
21 const util = require('../../../lib/otf-util');
\r
22 const Readable = require('stream').Readable;
\r
23 const request = require('request');
\r
26 constructor(options) {
\r
27 this.options = options || {};
\r
30 async find(params) {
\r
34 async get(id, params) {
\r
36 id, text: `A new message with ID: ${id}!`
\r
40 async create(data, params) {
\r
41 if (Array.isArray(data)) {
\r
42 return Promise.all(data.map(current => this.create(current, params)));
\r
45 data.deploying = true;
\r
47 //let formData = new FormData();
\r
49 //prepare multipart form data
\r
50 //formData.append('testDefinitionDeployerId', JSON.stringify(params.user._id));
\r
51 formData['testDefinitionDeployerId'] = JSON.stringify(params.user._id);
\r
52 if (data.testDefinition._id) {
\r
53 //formData.append('testDefinitionId', JSON.stringify(data.testDefinition._id));
\r
54 formData['testDefinitionId'] = JSON.stringify(data.testDefinition._id);
\r
57 //If version was supplied change current version
\r
58 if(data.version != null && data.version != undefined){
\r
59 data.testDefinition.currentVersion = data.testDefinition.bpmnInstances.findIndex(e => e.version == data.version);
\r
63 await this.options.app.services[this.options.app.get('base-path') + 'file-transfer'].get(data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].bpmnFileId)
\r
65 // let b = new Buffer(result);
\r
66 // console.log(b.toString())
\r
67 let s = new Readable();
\r
71 formData['bpmn'] = s.read();
\r
72 // s.pipe(formData['bpmn']);
\r
79 //get resource zip file
\r
80 if (data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].resourceFileId) {
\r
81 await this.options.app.services[this.options.app.get('base-path') + 'file-transfer'].get(data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].resourceFileId)
\r
83 //let b = new Buffer(result);
\r
84 let s = new Readable();
\r
89 formData['resources'] = s.read();
\r
90 //formData.append('resource', s);
\r
99 url: this.options.app.get('serviceApi').url + 'testStrategy/deploy/v1',
\r
101 'Authorization': 'Basic ' + util.base64Encode(this.options.app.get('serviceApi').aafId + ':' + this.options.app.get('serviceApi').aafPassword),
\r
102 'Content-Type': "multipart/form-data"
\r
104 rejectUnauthorized: false,
\r
107 let deployed = false;
\r
108 let deployedDefinition;
\r
110 await new Promise((resolve, reject) => {
\r
111 request.post(options, (err, res, body) => {
\r
112 response = res || err;
\r
116 if(res && res.statusCode == 200){
\r
126 deployedDefinition = JSON.parse(result);
\r
131 console.log(err.body);
\r
136 return new Response(500, {}, { errors: { deployment: 'The bpmn file failed to deploy on the server.' } });
\r
139 // Since test head objects are sent, we only store the test head id. this for loop adds those to the object to save
\r
140 // for (let i = 0; i < data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].testHeads.length; i++) {
\r
141 // data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].testHeads[i].testHeadId = data.testDefinition.bpmnInstances[data.testDefinition.currentVersion].testHeads[i].testHead._id;
\r
144 // let td = await this.options.app.services[this.options.app.get('base-path') + 'test-definitions'].create(data.testDefinition, params)
\r
145 // .then(result => {
\r
146 // return result['data'];
\r
149 // console.log(err);
\r
152 delete params.query;
\r
154 //check to see if the process definition Key was set
\r
155 // if (!data.testDefinition.processDefinitionKey) {
\r
156 // data.testDefinition.processDefinitionKey = validated.body.processDefinitionKey;
\r
158 let td = await this.options.app.services[this.options.app.get('base-path') + 'test-definitions'].patch(data.testDefinition._id, {
\r
160 ['bpmnInstances.' + data.testDefinition.currentVersion + '.isDeployed']: true,
\r
161 ['bpmnInstances.' + data.testDefinition.currentVersion + '.processDefinitionId']: deployedDefinition['processDefinitionId'],
\r
162 ['bpmnInstances.' + data.testDefinition.currentVersion + '.deploymentId']: deployedDefinition['deploymentId']
\r
172 return new Response(200, {}, {
\r
173 //bpmnVthTaskIds: validated.body.bpmnVthTaskIds,
\r
174 //errors: validated.body.errors,
\r
179 async update(id, data, params) {
\r
183 async patch(id, data, params) {
\r
187 async remove(id, params) {
\r
192 module.exports = function (options) {
\r
193 return new Service(options);
\r
196 module.exports.Service = Service;
\r