149 lines
5.1 KiB
JavaScript
149 lines
5.1 KiB
JavaScript
import OpenStack from "../../src/openstack";
|
|
import * as openStackMockData from './helpers/data/openstack';
|
|
import * as neutronMockData from './helpers/data/neutron';
|
|
import * as keystoneMockData from './helpers/data/keystone';
|
|
import fetchMock from 'fetch-mock';
|
|
import Neutron from "../../src/neutron";
|
|
import Keystone from "../../src/keystone";
|
|
|
|
describe("Simple test", () => {
|
|
|
|
afterEach(fetchMock.restore);
|
|
|
|
it("should export a class", () => {
|
|
let t = new OpenStack(openStackMockData.config());
|
|
expect(t).toBeDefined();
|
|
});
|
|
|
|
it("should throw an error for an empty config", () => {
|
|
try {
|
|
let t = new OpenStack();
|
|
t.getConfig();
|
|
} catch (e) {
|
|
expect(e.message).toEqual('A configuration is required.');
|
|
}
|
|
});
|
|
|
|
it("getConfig should returns the config", () => {
|
|
let openstack = new OpenStack(openStackMockData.config());
|
|
let config = openstack.getConfig();
|
|
expect(config.region_name).toEqual('RegionOne');
|
|
});
|
|
|
|
describe('networkList', () => {
|
|
it('should fetch networkList from neutron', (done) => {
|
|
const openstack = new OpenStack(openStackMockData.config());
|
|
const neutron = mockNeutron(openstack);
|
|
const networksData = neutronMockData.networkList('token').response.networks;
|
|
|
|
spyOn(neutron, 'networkList').and.returnValue(Promise.resolve(networksData));
|
|
|
|
openstack.networkList()
|
|
.then((networks) => {
|
|
expect(networks.length).toBe(2);
|
|
done();
|
|
})
|
|
.catch((error) => done.fail(error));
|
|
});
|
|
});
|
|
|
|
describe('_neutron', () => {
|
|
it('creates Neutron instance with the correct endpoint', (done) => {
|
|
const token = 'test_token';
|
|
const openstack = new OpenStack(openStackMockData.config());
|
|
const keystone = mockKeystone(openstack);
|
|
const catalogData = keystoneMockData.catalogList(token).response.catalog;
|
|
|
|
spyOn(keystone, 'tokenIssue').and.returnValue(Promise.resolve(token));
|
|
spyOn(keystone, 'catalogList').and.returnValue(Promise.resolve(catalogData));
|
|
|
|
openstack._neutron
|
|
.then((neutron) => {
|
|
expect(keystone.catalogList).toHaveBeenCalledWith(token);
|
|
expect(neutron).toEqual(jasmine.any(Neutron));
|
|
expect(neutron.endpointUrl).toEqual('http://192.168.99.99:9696/');
|
|
done();
|
|
})
|
|
.catch((error) => done.fail(error));
|
|
});
|
|
|
|
it('creates Neutron instance for the correct endpoint', (done) => {
|
|
const token = 'test_token';
|
|
const openstack = new OpenStack(openStackMockData.config('RegionTwo'));
|
|
const keystone = mockKeystone(openstack);
|
|
const catalogData = keystoneMockData.catalogList(token).response.catalog;
|
|
|
|
spyOn(keystone, 'tokenIssue').and.returnValue(Promise.resolve(token));
|
|
spyOn(keystone, 'catalogList').and.returnValue(Promise.resolve(catalogData));
|
|
|
|
openstack._neutron
|
|
.then((neutron) => {
|
|
expect(neutron).toEqual(jasmine.any(Neutron));
|
|
expect(neutron.endpointUrl).toEqual('http://192.168.99.100:9696/');
|
|
done();
|
|
})
|
|
.catch((error) => done.fail(error));
|
|
});
|
|
|
|
it('should cache Neutron instance and Keystone token', (done) => {
|
|
const openstack = new OpenStack(openStackMockData.config());
|
|
const tokenIssueMock = keystoneMockData.tokenIssue();
|
|
const catalogListMock = keystoneMockData.catalogList('test_token');
|
|
|
|
fetchMock.mock(keystoneMockData.root());
|
|
fetchMock.mock(tokenIssueMock);
|
|
fetchMock.mock(catalogListMock);
|
|
|
|
openstack._neutron
|
|
.then((neutron) => {
|
|
expect(neutron).toEqual(jasmine.any(Neutron));
|
|
expect(fetchMock.calls(tokenIssueMock.matcher).length).toEqual(1);
|
|
expect(fetchMock.calls(catalogListMock.matcher).length).toEqual(1);
|
|
return openstack._neutron;
|
|
})
|
|
.then((neutron) => {
|
|
expect(neutron).toEqual(jasmine.any(Neutron));
|
|
expect(fetchMock.calls(tokenIssueMock.matcher).length).toEqual(1);
|
|
expect(fetchMock.calls(catalogListMock.matcher).length).toEqual(1);
|
|
done();
|
|
})
|
|
.catch((error) => done.fail(error));
|
|
});
|
|
});
|
|
|
|
describe('_token', () => {
|
|
it('should fetch the token and cache it', (done) => {
|
|
const openstack = new OpenStack(openStackMockData.config());
|
|
const keystone = mockKeystone(openstack);
|
|
|
|
spyOn(keystone, 'tokenIssue').and.returnValue(Promise.resolve('test_token'));
|
|
|
|
openstack._token
|
|
.then((token) => {
|
|
expect(token).toEqual('test_token');
|
|
expect(keystone.tokenIssue.calls.count()).toEqual(1);
|
|
return openstack._token;
|
|
})
|
|
.then((token) => {
|
|
expect(token).toEqual('test_token');
|
|
expect(keystone.tokenIssue.calls.count()).toEqual(1);
|
|
done();
|
|
})
|
|
.catch((error) => done.fail(error));
|
|
});
|
|
});
|
|
|
|
function mockKeystone(openstack) {
|
|
const keystone = new Keystone(keystoneMockData.config);
|
|
openstack._keystonePromise = Promise.resolve(keystone);
|
|
return keystone;
|
|
}
|
|
|
|
function mockNeutron(openstack) {
|
|
const neutron = new Neutron(neutronMockData.config);
|
|
openstack._neutronPromise = Promise.resolve(neutron);
|
|
return neutron;
|
|
}
|
|
|
|
});
|