OpenStack wrapper instance

Create wrapper class that takes clouds.yaml instance

Change-Id: I37429b7bda35ca09efc3bf153841d4dc92d96b55
This commit is contained in:
Dong Ma 2016-09-13 18:31:34 +08:00
parent b033ad652e
commit 9677a06a2d
3 changed files with 92 additions and 0 deletions

View File

@ -1,3 +1,26 @@
export {default as Keystone} from './keystone';
export {default as Glance} from './glance';
export {default as Neutron} from './neutron';
export default class OpenStack {
/**
* Create wrapper class that takes clouds.yaml instance
*
* @param {{}} cloudConfig The configuration object for a specific cloud.
*/
constructor(cloudConfig) {
// Sanity checks.
if (!cloudConfig) {
throw new Error('A configuration is required.');
}
// Clone the config, so that this instance is immutable
// at runtime (no modifying the config after the fact).
cloudConfig = Object.assign({}, cloudConfig);
this.cloudConfig = cloudConfig;
}
getConfig() {
// Returns the config instance
return this.cloudConfig;
}
}

View File

@ -0,0 +1,37 @@
/*
* Copyright (c) 2016 Hewlett Packard Enterprise Development L.P.
*
* 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.
*/
/**
* This file contains test data for fetchMock, to simplify bootstrapping of unit tests for
* openstack class.
*/
/**
* Mock cloud configuration that matches our test data below. This is not a full clouds.yaml
* format, rather just the subsection pointing to a particular cloud.
*/
const cloudConfig = {
region_name: 'Region1',
auth: {
username: 'user',
password: 'pass',
project_name: 'js-openstack-lib',
auth_url: 'http://192.168.99.99/'
}
};
export {
cloudConfig as config,
};

32
test/unit/indexTest.js Normal file
View File

@ -0,0 +1,32 @@
import OpenStack from "../../src/index";
import * as mockData from './helpers/data/openstack';
const FetchMock = require('fetch-mock');
describe("Simple test", () => {
afterEach(() => {
FetchMock.reset();
});
it("should export a class", () => {
let t = new OpenStack(mockData.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(mockData.config);
let config = openstack.getConfig();
expect(config.region_name).toEqual('Region1');
});
});