blob: 2090f0ee389c7145d04b657ede486413378578ed [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* © OpenCORD
*
* Visit http://guide.xosproject.org/devguide/addview/ for more information
*
* Created by teone on 6/22/16.
*/
(function () {
'use strict';
describe('The Services Encoder Service', () => {
var service, rootScope, ArchiveManagerSpy, toscaBase;
const toscaBaseDefault = {
topology_template: {
node_templates: {}
}
};
beforeEach(module('xos.serviceGrid'));
beforeEach(module('templates'));
beforeEach(inject(($rootScope, ArchiveManager, ServiceEncoder) => {
rootScope = $rootScope;
toscaBase = angular.copy(toscaBaseDefault);
ArchiveManagerSpy = ArchiveManager;
spyOn(ArchiveManagerSpy, 'createArchive');
spyOn(ArchiveManagerSpy, 'addFile');
service = ServiceEncoder;
}));
describe('the formatServiceProperties method', () => {
it('should return only the existing properties', (done) => {
service.formatServiceProperties({name: 'test', kind: 'vCPE'}, toscaBase)
.then(res => {
expect(res).toEqual({
topology_template:{
node_templates: {
'service#test': {
type: 'tosca.nodes.VSGService',
properties: {kind: 'vCPE'}
}
}
}
});
done();
});
rootScope.$apply();
});
it('should return all properties', (done) => {
service.formatServiceProperties({
name: 'test',
kind: 'vCPE',
view_url: 'view_url',
icon_url: 'icon_url',
private_key_fn: 'private_key_fn'
}, toscaBase)
.then(res => {
expect(res).toEqual({
topology_template:{
node_templates: {
'service#test': {
type: 'tosca.nodes.VSGService',
properties: {
kind: 'vCPE',
view_url: 'view_url',
icon_url: 'icon_url',
private_key_fn: 'private_key_fn'
}
}
}
}
});
done();
});
rootScope.$apply();
});
describe('when a public key is provided', () => {
it('should add public_key and artifacts properties', (done) => {
let expected = {
topology_template:{
node_templates: {
'service#test': {
type: 'tosca.nodes.VSGService',
properties: {
kind: 'vCPE',
public_key: '{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }'
},
artifacts: {
pubkey: '/opt/xos/tosca/test/test_rsa.pub'
}
}
}
}
};
service.formatServiceProperties({
kind: 'vCPE',
public_key: 'pkey',
name: 'test'
}, toscaBase)
.then(res => {
expect(res).toEqual(expected);
done();
});
rootScope.$apply();
});
it('should add public_key file to the archive', (done) => {
service.formatServiceProperties({
kind: 'vCPE',
public_key: 'pkey',
name: 'test'
}, toscaBase)
.then(res => {
expect(ArchiveManagerSpy.addFile).toHaveBeenCalledWith('test_rsa.pub', 'pkey');
done();
});
rootScope.$apply();
});
});
});
describe('the getServiceRequirements method', () => {
let TenantSpy, ServiceSpy, tenantQueryPromise;
beforeEach(inject(function(Tenants, Services, $q){
tenantQueryPromise= $q.defer();
TenantSpy = Tenants;
spyOn(TenantSpy, 'query').and.callFake(function(){
return {$promise: tenantQueryPromise.promise};
});
ServiceSpy = Services;
spyOn(ServiceSpy, 'get').and.callFake(function(p){
let d = $q.defer();
d.resolve({name: `deps_${p.id}`});
return {$promise: d.promise};
});
}));
it('should call the tenants service with correct params', () => {
service.getServiceRequirements({id: 1});
expect(TenantSpy.query).toHaveBeenCalledWith({subscriber_service: 1});
});
it('should not add requirements if the current service has no dependency', (done) => {
service.getServiceRequirements({id: 1}, {})
.then(res => {
expect(res).toEqual({});
done();
});
tenantQueryPromise.resolve();
rootScope.$apply();
});
it('should return a list of required service', () => {
service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
.then(res => {
expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
{
deps_3_tenant: {
node: 'service#deps_3',
relationship: 'tosca.relationships.TenantOfService'
}
},
{
deps_4_tenant: {
node: 'service#deps_4',
relationship: 'tosca.relationships.TenantOfService'
}
}
]);
});
tenantQueryPromise.resolve([
{
subscriber_service: 1,
provider_service: 3
},
{
subscriber_service: 1,
provider_service: 4
}
]);
rootScope.$apply();
});
it('should return a list of unique required service', () => {
service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
.then(res => {
expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
{
deps_3_tenant: {
node: 'service#deps_3',
relationship: 'tosca.relationships.TenantOfService'
}
}
]);
});
tenantQueryPromise.resolve([
{
subscriber_service: 1,
provider_service: 3
},
{
subscriber_service: 1,
provider_service: 3
}
]);
rootScope.$apply();
});
});
});
})();