diff options
author | saul.gill <saul.gill@est.tech> | 2021-10-29 14:24:20 +0100 |
---|---|---|
committer | saul.gill <saul.gill@est.tech> | 2021-10-29 15:16:06 +0100 |
commit | ce0db169bce5d44ab36be7015a11c9a0205e05a1 (patch) | |
tree | c2b631c8e320c1528fe4b87da9d5a21eeabe41e8 /gui-clamp/ui-react/src | |
parent | 6df019389c1f5de9dd5b7601e270f0ef17ea2491 (diff) |
Added tests to improve coverage
Added new tests and snapshots
Altered existing tests to bring up coverage
Altered package.json in response to warning messages
Removed unused functions from ControlLoopService
Added json testFiles
Added utils directory for out-of-component functions
Issue-ID: POLICY-3643
Change-Id: I3405a4421637e63235ff5176c913a5a5f9a4a44c
Signed-off-by: saul.gill <saul.gill@est.tech>
Diffstat (limited to 'gui-clamp/ui-react/src')
21 files changed, 4896 insertions, 228 deletions
diff --git a/gui-clamp/ui-react/src/api/ControlLoopService.js b/gui-clamp/ui-react/src/api/ControlLoopService.js index b3d987c..011d5ae 100644 --- a/gui-clamp/ui-react/src/api/ControlLoopService.js +++ b/gui-clamp/ui-react/src/api/ControlLoopService.js @@ -132,18 +132,6 @@ export default class ControlLoopService { return data; } - static async getToscaControlLoopDefinitions() { - - const response = await fetch(window.location.pathname + - 'restservices/clds/v2/toscaControlLoop/getElementDefinitions'); - - this.checkResponseForError(response); - - const data = await response; - - return data; - } - static async getCommonOrInstanceProperties(name, version, isCommon) { const params = { name: name, @@ -157,25 +145,4 @@ export default class ControlLoopService { return response; } - static async getToscaServiceTemplateSchema(section) { - - const params = { - section: section - } - - const response = await fetch(window.location.pathname + - 'restservices/clds/v2/toscaControlLoop/getJsonSchema' + '?' + (new URLSearchParams(params))); - - this.checkResponseForError(response); - - return response; - } - - static checkResponseForError(response) { - if (!response.ok) { - const message = `An error has occurred: ${ response.status }`; - throw new Error(message); - } - } - } diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.test.js new file mode 100644 index 0000000..4d288c6 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ChangeOrderStateModal.test.js @@ -0,0 +1,263 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +import React from 'react'; +import { mount, shallow } from 'enzyme'; +import toJson from "enzyme-to-json"; +import ChangeOrderStateModal from "./ChangeOrderStateModal"; +import { createMemoryHistory } from "history"; +import { act } from "react-dom/test-utils"; +import clLoopList from "./testFiles/controlLoopList.json"; +import orderedStateJson from "./testFiles/orderedStateJson.json"; +import ControlLoopService from "../../../api/ControlLoopService"; + +let logSpy = jest.spyOn(console, 'log') +const oldWindowLocation = window.location +describe('Verify ChangeOrderStateModal', () => { + const flushPromises = () => new Promise(setImmediate); + + beforeEach(() => { + logSpy.mockClear() + }) + + afterAll(() => { + window.location = oldWindowLocation + }) + + beforeAll(() => { + jest + .spyOn(global, 'fetch') + .mockImplementation(() => { + return { + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(orderedStateJson) + } + } + } + ) + + + delete window.location + + // create a new `window.location` object that's *almost* + // like the real thing + window.location = Object.defineProperties( + // start with an empty object on which to define properties + {}, + { + // grab all of the property descriptors for the + // `jsdom` `Location` object + ...Object.getOwnPropertyDescriptors(oldWindowLocation), + instantiationName: { + configurable: true, + value: "PMSH_Instance1", + }, + instantiationVersion: { + configurable: true, + value: "2.3.1", + } + }, + ) + }) + + it("renders without crashing", () => { + act(() => { + shallow(<ChangeOrderStateModal location={window.location}/>); + }) + }); + + it("renders correctly", () => { + act(() => { + const tree = shallow(<ChangeOrderStateModal location={window.location}/>); + expect(toJson(tree)).toMatchSnapshot(); + }) + }); + + it('should have two Button elements', () => { + act(() => { + const container = shallow(<ChangeOrderStateModal location={window.location}/>) + expect(container.find('Button').length).toEqual(2); + }) + }); + + it('should have one dropdown element', () => { + act(() => { + const container = shallow(<ChangeOrderStateModal location={ window.location }/>) + expect(container.find('Dropdown').length).toEqual(1); + }); + }); + + it('handleDropSelect called when dropdown clicked', () => { + const history = createMemoryHistory(); + const component = mount(<ChangeOrderStateModal history={ history } location={window.location}/>) + + act(() => { + component.find('Dropdown').get(0).props.onSelect(); + expect(logSpy).toHaveBeenCalledWith('handleDropDownChange called'); + }); + + component.unmount(); + }); + + it('handleClose called when bottom button clicked', () => { + const history = createMemoryHistory(); + const component = mount(<ChangeOrderStateModal history={ history } location={window.location}/>) + + act(() => { + component.find('[variant="secondary"]').simulate('click'); + expect(logSpy).toHaveBeenCalledWith('handleClose called'); + }); + + component.unmount(); + }); + + it('handleClose called when top-right button clicked', () => { + const history = createMemoryHistory(); + const component = mount(<ChangeOrderStateModal history={ history } location={window.location}/>) + + act(() => { + component.find('[size="sm"]').get(0).props.onHide(); + expect(logSpy).toHaveBeenCalledWith('handleClose called'); + }); + + component.unmount(); + }); + + it('handleSave called when save button clicked and response is ok', async () => { + jest.resetAllMocks() + const getInstanceOrderStateSpy = jest.spyOn(ControlLoopService, 'getInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(orderedStateJson) + } + }) + } + ) + + const changeInstanceOrderStateSpy = jest.spyOn(ControlLoopService, 'changeInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(clLoopList) + } + }) + } + ) + + const component = mount(<ChangeOrderStateModal location={window.location}/>) + + await act( async () => { + component.find('[variant="primary"]').simulate('click'); + await expect(getInstanceOrderStateSpy).toHaveBeenCalled() + await expect(changeInstanceOrderStateSpy).toHaveBeenCalled() + expect(logSpy).toHaveBeenNthCalledWith(1,"handleSave called"); + expect(logSpy).toHaveBeenNthCalledWith(2,"successAlert called"); + // await expect(logSpy).toHaveBeenCalledTimes(2); + }); + }); + + it('handleSave called when save button clicked and response is not ok', async () => { + jest.resetAllMocks() + const getInstanceOrderStateSpy = jest.spyOn(ControlLoopService, 'getInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(orderedStateJson) + } + }) + } + ) + + const changeInstanceOrderStateSpy = jest.spyOn(ControlLoopService, 'changeInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: false, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(clLoopList) + } + }) + } + ) + + const component = mount(<ChangeOrderStateModal location={window.location}/>) + + await act( async () => { + component.find('[variant="primary"]').simulate('click'); + await expect(getInstanceOrderStateSpy).toHaveBeenCalled() + await expect(changeInstanceOrderStateSpy).toHaveBeenCalled() + expect(logSpy).toHaveBeenNthCalledWith(1,"handleSave called"); + expect(logSpy).toHaveBeenNthCalledWith(2,"errorAlert called"); + // await expect(logSpy).toHaveBeenCalledTimes(2); + }); + }); + + it('Check useEffect is being called', async () => { + jest.resetAllMocks() + jest.spyOn(ControlLoopService, 'getInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(orderedStateJson) + } + }) + } + ) + + jest.spyOn(ControlLoopService, 'changeInstanceOrderState') + .mockImplementationOnce(() => { + return Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(clLoopList) + } + }) + } + ) + + const component = mount(<ChangeOrderStateModal location={window.location}/>) + + const useEffect = jest.spyOn(React, "useEffect"); + await act(async () => { + await flushPromises() + component.update() + await expect(useEffect).toHaveBeenCalled(); + }) + component.unmount(); + }); +}); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.js index fc150ef..b3b76c1 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.js @@ -21,9 +21,9 @@ import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; import React, { useEffect, useState } from "react"; import styled from "styled-components"; -import { JSONEditor } from "@json-editor/json-editor"; import ControlLoopService from "../../../api/ControlLoopService"; import { Alert } from "react-bootstrap"; +import CommissioningUtils from "./utils/CommissioningUtils"; const ModalStyled = styled(Modal)` @media (min-width: 800px) { @@ -81,7 +81,12 @@ const CommissioningModal = (props) => { } if (toscaTemplateResponse.ok && toscaCommonProperties.ok) { - await renderJsonEditor(toscaTemplateResponse, toscaCommonProperties) + const renderedEditorObjects = CommissioningUtils.renderJsonEditor(toscaTemplateResponse, toscaCommonProperties) + setFullToscaTemplate((await renderedEditorObjects).fullTemplate) + setToscaJsonSchema((await renderedEditorObjects).propertySchema) + setJsonEditor((await renderedEditorObjects).editorTemp) + setToscaInitialValues((await renderedEditorObjects).toscaInitialValues) + } }, []); @@ -92,176 +97,31 @@ const CommissioningModal = (props) => { props.history.push('/'); } - const handleSave = () => { - updateTemplate(jsonEditor.getValue()) + const handleSave = async () => { + console.log("handleSave called") + if (jsonEditor != null) { + setFullToscaTemplate(await CommissioningUtils.updateTemplate(jsonEditor.getValue(), fullToscaTemplate)) + } } const handleCommission = async () => { + console.log("handleCommission called") + await ControlLoopService.deleteToscaTemplate('ToscaServiceTemplateSimple', "1.0.0") - .catch(error => error.message) const recommissioningResponse = await ControlLoopService.uploadToscaFile(fullToscaTemplate) - .catch(error => error.message) await receiveResponseFromCommissioning(recommissioningResponse) } const receiveResponseFromCommissioning = async (response) => { - - if (await response.ok) { - setAlertMessages(<Alert variant="success"> - <Alert.Heading>Commissioning Success</Alert.Heading> - <p>Altered Template was Successfully Uploaded</p> - <hr/> - </Alert>); - } - else { - setAlertMessages(<Alert variant="danger"> - <Alert.Heading>Commissioning Failure</Alert.Heading> - <p>Updated Template Failed to Upload</p> - <p>Status code: { await response.status }: { response.statusText }</p> - <p>Response Text: { await response.text() }</p> - <hr/> - </Alert>); - } + console.log("receiveResponseFromCommissioning called") + setAlertMessages(await CommissioningUtils.getAlertMessages(response)); }; - const renderJsonEditor = async (template, commonProps) => { - - const fullTemplate = await template.json() - - setFullToscaTemplate(fullTemplate) - const allNodeTemplates = fullTemplate.topology_template.node_templates - const shortenedNodeTemplatesObjectStartValues = {} - // Get the common properties to construct a schema - // Get valid start values at the same time - const commonNodeTemplatesJson = await commonProps.json().then(data => { - const nodeTemplatesArray = Object.entries(data) - const shortenedNodeTemplatesObject = {} - nodeTemplatesArray.forEach(([key, temp]) => { - const currentNodeTemplate = allNodeTemplates[key] - const propertiesObject = { - properties: temp.properties - } - - shortenedNodeTemplatesObject[key] = propertiesObject - - const propertiesStartValues = {} - - // Get all the existing start values to populate the properties in the schema - Object.entries(propertiesObject.properties).forEach(([propKey, prop]) => { - propertiesStartValues[propKey] = currentNodeTemplate.properties[propKey] - }) - - shortenedNodeTemplatesObjectStartValues[key] = propertiesStartValues - - }) - - setToscaInitialValues(shortenedNodeTemplatesObjectStartValues) - return shortenedNodeTemplatesObject; - }) - - const propertySchema = makeSchemaForCommonProperties(commonNodeTemplatesJson) - setToscaJsonSchema(propertySchema) - - editorTemp = createJsonEditor(propertySchema, shortenedNodeTemplatesObjectStartValues); - setJsonEditor(editorTemp) - } - - const updateTemplate = (userAddedCommonPropValues) => { - const nodeTemplates = fullToscaTemplate.topology_template.node_templates - const commonPropertyDataEntries = Object.entries(userAddedCommonPropValues) - - // This replaces the values for properties in the full tosca template - // that will be sent up to the api with the entries the user provided. - commonPropertyDataEntries.forEach(([templateKey, values]) => { - Object.entries(values).forEach(([propKey, propVal]) => { - nodeTemplates[templateKey].properties[propKey] = propVal - }) - }) - - fullToscaTemplate.topology_template.node_templates = nodeTemplates - - setFullToscaTemplate(fullToscaTemplate) - alert('Changes saved. Commission When Ready...') - } - - const makeSchemaForCommonProperties = (commonProps) => { - const commonPropsArr = Object.entries(commonProps) - - const newSchemaObject = {} - - newSchemaObject.title = "CommonProperties" - newSchemaObject.type = "object" - newSchemaObject.properties = {} - - commonPropsArr.forEach(([templateKey, template]) => { - - const propertiesObject = {} - Object.entries(template.properties).forEach(([propKey, prop]) => { - - propertiesObject[propKey] = { - type: getType(prop.type) - } - - }) - newSchemaObject.properties[templateKey] = { - options: { - "collapsed": true - }, - properties: propertiesObject - } - }) - - return newSchemaObject - - } - - const getType = (propertyType) => { - switch (propertyType) - { - case "string": - return "string" - case "integer": - return "integer" - case "list": - return "array" - case "object": - return "object" - default: - return "object" - } - } - - const createJsonEditor = (toscaModel, editorData) => { - JSONEditor.defaults.options.collapse = false; - - return new JSONEditor(document.getElementById("editor"), - { - schema: toscaModel, - startval: editorData, - theme: 'bootstrap4', - iconlib: 'fontawesome5', - object_layout: 'normal', - disable_properties: false, - disable_edit_json: true, - disable_array_reorder: true, - disable_array_delete_last_row: true, - disable_array_delete_all_rows: false, - array_controls_top: true, - keep_oneof_values: false, - collapsed: false, - show_errors: 'always', - display_required_only: false, - show_opt_in: false, - prompt_before_delete: true, - required_by_default: false, - }) - } - return ( <ModalStyled size="xl" show={ show } diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.test.js index 054450c..5ace94d 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/CommissioningModal.test.js @@ -17,16 +17,38 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ - import React from 'react'; import { mount, shallow } from 'enzyme'; -import ReadAndConvertYaml from './ReadAndConvertYaml'; import toJson from "enzyme-to-json"; import { act } from "react-dom/test-utils"; import { createMemoryHistory } from "history"; import CommissioningModal from "./CommissioningModal"; +import commonProps from "./testFiles/commonProps.json"; +import fullTemp from "./testFiles/fullTemplate.json"; +import ControlLoopService from "../../../api/ControlLoopService"; + +let logSpy = jest.spyOn(console, 'log') +const commonProperties = JSON.parse(JSON.stringify(commonProps)) +const fullTemplate = JSON.parse(JSON.stringify(fullTemp)) +describe('Verify CommissioningModal', () => { + + const unmockedFetch = global.fetch + beforeAll(() => { + global.fetch = () => + Promise.resolve({ + status: 200, + text: () => "OK", + json: () => "{GlobalFetch}" + }) + }) -describe('Verify ReadAndConvertYaml', () => { + afterAll(() => { + global.fetch = unmockedFetch + }) + + beforeEach(() => { + logSpy.mockClear() + }) it("renders without crashing", () => { shallow(<CommissioningModal/>); @@ -45,25 +67,164 @@ describe('Verify ReadAndConvertYaml', () => { it('handleClose called when bottom button clicked', () => { const history = createMemoryHistory(); const component = mount(<CommissioningModal history={ history }/>) - const logSpy = jest.spyOn(console, 'log'); + // const logSpy = jest.spyOn(console, 'log'); act(() => { component.find('[variant="secondary"]').simulate('click'); expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); + + component.unmount(); }); it('handleClose called when top-right button clicked', () => { const history = createMemoryHistory(); const component = mount(<CommissioningModal history={ history }/>) - const logSpy = jest.spyOn(console, 'log'); - act(() => { component.find('[size="xl"]').get(0).props.onHide(); expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); + + component.unmount(); + }); + + it('handleSave called when save button clicked', () => { + const component = shallow(<CommissioningModal/>) + act(() => { + component.find('[variant="primary"]').simulate('click'); + expect(logSpy).toHaveBeenCalledWith("handleSave called"); + }); + }); + + it('getToscaTemplate gets called in useEffect with error', async() => { + const fetchMock = jest.spyOn(ControlLoopService, 'getToscaTemplate').mockImplementation(() => Promise.resolve({ + ok: false, + status: 200, + text: () => "OK", + json: () => fullTemplate + })) + + mount(<CommissioningModal/>) + await act(async () => { + expect(fetchMock).toHaveBeenCalled(); + }); }); + it('getCommonProperties gets called in useEffect with error', async() => { + const fetchMock = jest.spyOn(ControlLoopService, 'getToscaTemplate').mockImplementation(() => Promise.resolve({ + ok: false, + status: 200, + text: () => "OK", + json: () => commonProperties + })) + + mount(<CommissioningModal/>) + await act(async () => { + expect(fetchMock).toHaveBeenCalled(); + }); + }); + + it('useState gets called in useEffect with error', async() => { + const useStateSpy = jest.spyOn(React, 'useState') + jest + .spyOn(global, 'fetch') + .mockImplementation(() => + Promise.resolve({ + ok: false, + status: 200, + text: () => "OK", + json: () => "{useState}" + }) + ) + + mount(<CommissioningModal/>) + await act(async () => { + expect(useStateSpy).toHaveBeenCalledTimes(6); + }); + }); + + it('set state gets called for setFullToscaTemplate', () => { + const setFullToscaTemplate = jest.fn(); + const history = createMemoryHistory(); + jest + .spyOn(global, 'fetch') + .mockImplementation(() => + Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => fullTemplate + }) + ) + + mount(<CommissioningModal history={ history }/>) + act(async () => { + // expect(renderJsonEditor).toHaveBeenCalled(); + expect(setFullToscaTemplate).toHaveBeenCalledTimes(1); + }); + }); + + it('set state gets called for setToscaJsonSchema useEffect on success', () => { + const setToscaJsonEditor = jest.fn(); + const history = createMemoryHistory(); + jest + .spyOn(global, 'fetch') + .mockImplementation(() => + Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => fullTemplate + }) + ) + + mount(<CommissioningModal history={ history }/>) + act(async () => { + // expect(renderJsonEditor).toHaveBeenCalled(); + expect(setToscaJsonEditor).toHaveBeenCalledTimes(1); + }); + }); + + it('Check useEffect is being called', async () => { + const useEffect = jest.spyOn(React, "useEffect"); + mount(<CommissioningModal/>) + await act(async () => { + expect(useEffect).toHaveBeenCalled(); + }) + }); + + it('test handleCommission called on click', async () => { + const deleteToscaTemplateSpy = jest.spyOn(ControlLoopService, 'deleteToscaTemplate').mockImplementation(() => { + Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => "{handleCommissioning}" + }) + }) + const uploadToscaTemplateSpy = jest.spyOn(ControlLoopService, 'uploadToscaFile').mockImplementation(() => { + Promise.resolve({ + ok: true, + status: 200, + text: () => "OK", + json: () => "{uploadToscaFile}" + }) + }) + + + const useStateSpy = jest.spyOn(React, 'useState') + + const component = shallow(<CommissioningModal/>) + component.find('[variant="success mr-auto"]').simulate('click'); + + await act( async () => { + expect(logSpy).toHaveBeenCalledWith("handleCommission called") + expect(await deleteToscaTemplateSpy).toHaveBeenCalled() + expect(await uploadToscaTemplateSpy).toHaveBeenCalled() + expect(logSpy).toHaveBeenCalledWith("receiveResponseFromCommissioning called") + expect(useStateSpy).toHaveBeenCalled() + }) + }) }); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.js index 7968fe2..c2703cc 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.js @@ -30,7 +30,12 @@ const DeleteToscaTemplate = props => { const response = await ControlLoopService.deleteToscaTemplate(props.templateName, props.templateVersion) .catch(error => error.message); - console.log('Response is ok: ' + response.ok); + if(!response.ok) { + console.log('deleteTemplateHandler called with error'); + } else { + console.log('deleteTemplateHandler called'); + } + // console.log('Response is ok: ' + response.ok); props.onDeleteToscaServiceTemplate(response); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.test.js index e4d437a..c52bdea 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/DeleteToscaTemplate.test.js @@ -20,7 +20,6 @@ import React from 'react'; import { mount, shallow } from 'enzyme'; -import GetToscaTemplate from './GetToscaTemplate'; import toJson from "enzyme-to-json"; import DeleteToscaTemplate from "./DeleteToscaTemplate"; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.js index ba78b80..70c1f41 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.js @@ -24,11 +24,18 @@ import ControlLoopService from "../../../api/ControlLoopService"; const GetToscaTemplate = (props) => { const getTemplateHandler = async () => { - console.log('getTemplateHandler called') const response = await ControlLoopService.getToscaTemplate(props.templateName, props.templateVersion) .catch(error => error.message); + if(!response.ok) { + console.log('getToscaServiceTemplateHandler called with error') + + } else + { + console.log('getToscaServiceTemplateHandler called') + } + props.onGetToscaServiceTemplate(response); } diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.test.js index 38da005..71fbeec 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/GetToscaTemplate.test.js @@ -21,9 +21,12 @@ import React from 'react'; import { mount, shallow } from 'enzyme'; import GetToscaTemplate from './GetToscaTemplate'; import toJson from "enzyme-to-json"; +import { act } from "react-dom/test-utils"; describe('Verify GetToscaTemplate', () => { + const flushPromises = () => new Promise(setImmediate); + it("renders without crashing", () => { shallow(<GetToscaTemplate/>); }); @@ -38,12 +41,41 @@ describe('Verify GetToscaTemplate', () => { expect(container.find('Button').length).toEqual(1); }); - it('button should call getTemplateHandler when clicked', async () => { - const component = mount(<GetToscaTemplate/>) + it('button should call getTemplateHandler when clicked when response is error', async () => { + + const onGetToscaServiceTemplate = jest.fn() + jest + .spyOn(global, 'fetch') + .mockImplementationOnce(async () => + Promise.resolve({ + ok: false, + status: 200, + json: () => { + return Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + } + } + ) + ) + + const component = mount(<GetToscaTemplate onGetToscaServiceTemplate={onGetToscaServiceTemplate}/>) const logSpy = jest.spyOn(console, 'log'); - component.find('[variant="primary"]').simulate('click'); - expect(logSpy).toHaveBeenCalledWith('getTemplateHandler called'); + await act(async () => { + component.find('[variant="primary"]').simulate('click'); + await flushPromises() + component.update() + expect(logSpy).toHaveBeenCalledWith('getToscaServiceTemplateHandler called with error'); + }); + component.unmount(); }); it('should have a Button element with specified text', () => { diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/InstantiationOrderStateChangeItem.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/InstantiationOrderStateChangeItem.test.js new file mode 100644 index 0000000..3981ea5 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/InstantiationOrderStateChangeItem.test.js @@ -0,0 +1,51 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +import React from 'react'; +import { mount, shallow } from 'enzyme'; +import toJson from "enzyme-to-json"; +import InstantiationOrderStateChangeItem from "./InstantiationOrderStateChangeItem"; +import CommissioningUtils from "./utils/CommissioningUtils"; + +describe('Verify InstantiationOrderStateChangeItem', () => { + + it("renders without crashing", () => { + shallow(<InstantiationOrderStateChangeItem/>); + }); + + it("renders correctly", () => { + const tree = shallow(<InstantiationOrderStateChangeItem/>); + expect(toJson(tree)).toMatchSnapshot(); + }); + + it("renders correctly when orderState is uninitialized", () => { + const tree = shallow(<InstantiationOrderStateChangeItem orderState="UNINITIALISED" title="UNINITIALISED_TEST"/>); + expect(toJson(tree)).toMatchSnapshot(); + }); + + it("renders correctly when orderState is passive", () => { + const tree = shallow(<InstantiationOrderStateChangeItem orderState="PASSIVE" title="PASSIVE_TEST"/>); + expect(toJson(tree)).toMatchSnapshot(); + }); + + it("renders correctly when orderState is running", () => { + const tree = shallow(<InstantiationOrderStateChangeItem orderState="RUNNING" title="RUNNING_TEST"/>); + expect(toJson(tree)).toMatchSnapshot(); + }); +}); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.js index 0eff5fe..5fc97c4 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.js @@ -66,6 +66,7 @@ const ReadAndConvertYaml = (props) => { setToscaTemplateData(toscaData); } else { setResponseOk(true); + console.log('Response is ok'); const toscaData = await toscaServiceTemplateResponse.json(); setToscaTemplateData(toscaData); setShowDeleteButton(true) diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.test.js index 90d7185..03192a1 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.test.js +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/ReadAndConvertYaml.test.js @@ -20,32 +20,43 @@ import React from 'react'; import { mount, shallow } from 'enzyme'; import ReadAndConvertYaml from './ReadAndConvertYaml'; +import GetToscaTemplate from "./GetToscaTemplate"; import toJson from "enzyme-to-json"; import { act } from "react-dom/test-utils"; import { createMemoryHistory } from "history"; +let logSpy = jest.spyOn(console, 'log') describe('Verify ReadAndConvertYaml', () => { - beforeEach(() => { - fetch.resetMocks(); - fetch.mockImplementation(() => { - return Promise.resolve({ + const unmockedFetch = global.fetch + + const flushPromises = () => new Promise(setImmediate); + + beforeAll(() => { + global.fetch = () => + Promise.resolve({ ok: true, status: 200, - json: () => { - return Promise.resolve({ - "tosca_definitions_version": "tosca_simple_yaml_1_1_0", - "data_types": {}, - "policy_types": {}, - "topology_template": {}, - "name": "ToscaServiceTemplateSimple", - "version": "1.0.0", - "metadata": {}, - "id": "0.19518677404255147" - }); - } - }); - }); + text: () => "OK", + json: () => Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + }) + }) + + beforeEach(() => { + logSpy.mockClear() + }) + + afterAll(() => { + global.fetch = unmockedFetch }) it("renders without crashing", () => { @@ -64,36 +75,178 @@ describe('Verify ReadAndConvertYaml', () => { it('should call getToscaServiceTemplateHandler on click', async () => { const component = mount(<ReadAndConvertYaml/>); - const logSpy = jest.spyOn(console, 'log'); - act(async () => { + await act(async () => { + component.find('GetToscaTemplate').simulate('click'); + await flushPromises() + component.update() + await expect(logSpy).toHaveBeenCalledWith('getToscaServiceTemplateHandler called'); + }); + component.unmount() + }); + + it('should make unsuccessful call getToscaServiceTemplateHandler on click', async () => { + jest + .spyOn(global, 'fetch') + .mockImplementationOnce(async () => + Promise.resolve({ + ok: false, + status: 200, + json: () => { + return Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + } + } + ) + ) + const component = mount(<ReadAndConvertYaml/>); + + await act(async () => { + component.find('GetToscaTemplate').simulate('click'); + await flushPromises() + component.update() + expect(logSpy).toHaveBeenCalledWith('getToscaServiceTemplateHandler called with error'); + }); + component.unmount(); + }); + + it('should make unsuccessful call deleteToscaServiceTemplateHandler on click', async () => { + jest + .spyOn(global, 'fetch') + .mockImplementationOnce(() => + Promise.resolve({ + ok: true, + status: 200, + json: () => { + return Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + } + } + ) + ) + const component = mount(<ReadAndConvertYaml/>); + + await act(async () => { component.find('GetToscaTemplate').simulate('click'); - expect(logSpy).toHaveBeenCalledWith('getToscaServiceTemplateHandler called'); + await flushPromises() + component.update() + component.find('DeleteToscaTemplate').simulate('click'); + await flushPromises() + component.update() + expect(logSpy).toHaveBeenCalledWith('deleteTemplateHandler called'); }); + + component.unmount() + }); + + it('should make unsuccessful call deleteToscaServiceTemplateHandler on click', async () => { + const realUseState = React.useState + const stubInitialState = [true] + + const useStateSpy = jest.spyOn(React, 'useState') + useStateSpy.mockImplementationOnce(() => realUseState(stubInitialState)); + + jest + .spyOn(global, 'fetch') + .mockImplementationOnce(() => + Promise.resolve({ + ok: true, + status: 200, + json: () => { + return Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + } + } + ) + ) + const component = mount(<ReadAndConvertYaml/>); + + + await act(async () => { + component.find('GetToscaTemplate').simulate('click'); + await flushPromises() + component.update() + }); + + jest + .spyOn(global, 'fetch') + .mockImplementationOnce(() => + Promise.resolve({ + ok: false, + status: 200, + json: () => { + return Promise.resolve({ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "data_types": {}, + "policy_types": {}, + "topology_template": {}, + "name": "ToscaServiceTemplateSimple", + "version": "1.0.0", + "metadata": {}, + "id": "0.19518677404255147" + }) + } + } + ) + ) + + await act(async () => { + component.find('DeleteToscaTemplate').simulate('click'); + await flushPromises() + component.update() + expect(logSpy).toHaveBeenCalledWith('deleteTemplateHandler called with error'); + }); + component.unmount() }); it('handleClose called when bottom button clicked', () => { const history = createMemoryHistory(); const component = mount(<ReadAndConvertYaml history={ history }/>) - const logSpy = jest.spyOn(console, 'log'); act(() => { component.find('[variant="secondary"]').simulate('click'); expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); + component.unmount() }); - it('handleClose called when top-right button clicked', () => { + it('handleClose called when top-right button clicked', async () => { const history = createMemoryHistory(); const component = mount(<ReadAndConvertYaml history={ history }/>) const logSpy = jest.spyOn(console, 'log'); - act(() => { + await act(async () => { component.find('[size="xl"]').get(0).props.onHide(); + await flushPromises() + component.update() expect(logSpy).toHaveBeenCalledWith('handleClose called'); }); + component.unmount() }); - }); diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/ChangeOrderStateModal.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/ChangeOrderStateModal.test.js.snap new file mode 100644 index 0000000..478b886 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/ChangeOrderStateModal.test.js.snap @@ -0,0 +1,114 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Verify ChangeOrderStateModal renders correctly 1`] = ` +<Styled(Modal) + backdrop="static" + keyboard={false} + onHide={[Function]} + show={true} + size="sm" +> + <ModalHeader + closeButton={true} + closeLabel="Close" + > + <ModalTitle> + Manage Instantiation + </ModalTitle> + </ModalHeader> + <div + style={ + Object { + "padding": "5px 5px 0 5px", + } + } + > + <ModalBody> + <Container + fluid={false} + > + <Dropdown + navbar={false} + onSelect={[Function]} + > + <DropdownToggle + id="dropdown-basic" + variant="dark" + > + Select Order State + </DropdownToggle> + <DropdownMenu + align="left" + alignRight={false} + flip={true} + > + <DropdownItem + as={ + Object { + "$$typeof": Symbol(react.forward_ref), + "render": [Function], + } + } + disabled={false} + eventKey="UNINITIALISED" + > + UNINITIALISED + </DropdownItem> + <DropdownItem + as={ + Object { + "$$typeof": Symbol(react.forward_ref), + "render": [Function], + } + } + disabled={false} + eventKey="PASSIVE" + > + PASSIVE + </DropdownItem> + <DropdownItem + as={ + Object { + "$$typeof": Symbol(react.forward_ref), + "render": [Function], + } + } + disabled={false} + eventKey="RUNNING" + > + RUNNING + </DropdownItem> + </DropdownMenu> + </Dropdown> + </Container> + <Styled(Alert) + show={false} + variant="danger" + > + Can't get instantiation ordered state: + <br /> + {} + </Styled(Alert)> + </ModalBody> + <styled.div /> + </div> + <ModalFooter> + <Button + active={false} + disabled={false} + onClick={[Function]} + variant="primary" + > + Save + </Button> + <Button + active={false} + disabled={false} + onClick={[Function]} + variant="secondary" + > + Close + </Button> + </ModalFooter> +</Styled(Modal)> +`; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/CommissioningModal.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/CommissioningModal.test.js.snap index 8c26ff6..5ed3f3e 100644 --- a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/CommissioningModal.test.js.snap +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/CommissioningModal.test.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Verify ReadAndConvertYaml renders correctly 1`] = ` +exports[`Verify CommissioningModal renders correctly 1`] = ` <Styled(Modal) backdrop="static" keyboard={false} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/InstantiationOrderStateChangeItem.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/InstantiationOrderStateChangeItem.test.js.snap new file mode 100644 index 0000000..bbf92ca --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/__snapshots__/InstantiationOrderStateChangeItem.test.js.snap @@ -0,0 +1,27 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Verify InstantiationOrderStateChangeItem renders correctly 1`] = `<Fragment />`; + +exports[`Verify InstantiationOrderStateChangeItem renders correctly when orderState is passive 1`] = ` +<Fragment> + <styled.div> + PASSIVE_TEST + </styled.div> +</Fragment> +`; + +exports[`Verify InstantiationOrderStateChangeItem renders correctly when orderState is running 1`] = ` +<Fragment> + <styled.div> + RUNNING_TEST + </styled.div> +</Fragment> +`; + +exports[`Verify InstantiationOrderStateChangeItem renders correctly when orderState is uninitialized 1`] = ` +<Fragment> + <styled.div> + UNINITIALISED_TEST + </styled.div> +</Fragment> +`; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/commonProps.json b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/commonProps.json new file mode 100644 index 0000000..71f98f8 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/commonProps.json @@ -0,0 +1,1444 @@ +{ + "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop element for the http requests of PMSH microservice", + "type": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "typeVersion": "1.0.1", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "version": "1.0.1" + }, + "key": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop element for the operational policy for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop element for the K8S microservice for local chart", + "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop element for the monitoring policy for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.sample.GenericK8s_ControlLoopDefinition": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop for Hello World", + "type": "org.onap.policy.clamp.controlloop.ControlLoop", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "elements": { + "name": "elements", + "type": "list", + "typeVersion": "0.0.0", + "description": "Specifies a list of control loop element definitions that make up this control loop definition", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": { + "name": null, + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.ControlLoop", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "definedVersion": "1.2.3" + }, + "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop element for the K8S microservice for PMSH", + "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "definedVersion": "1.2.3" + }, + "org.onap.domain.pmsh.DerivedPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3", + "derivedFrom": null, + "metadata": {}, + "description": "Control loop for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "typeVersion": "1.0.0", + "properties": { + "provider": { + "name": "provider", + "type": "string", + "typeVersion": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": null, + "defaultValue": null, + "required": false, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "typeVersion": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "defaultValue": null, + "required": true, + "status": null, + "constraints": null, + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "typeVersion": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "defaultValue": null, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "typeVersion": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "defaultValue": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "validValues": null, + "equal": null, + "greaterThan": null, + "greaterOrEqual": "0", + "lessThan": null, + "lessOrEqual": null, + "rangeValues": null + } + ], + "keySchema": null, + "entrySchema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "typeIdentifier": { + "name": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "definedName": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "definedVersion": "1.2.3" + } +} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/controlLoopList.json b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/controlLoopList.json new file mode 100644 index 0000000..d549879 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/controlLoopList.json @@ -0,0 +1,59 @@ +{ + "controlLoopList": [ + { + "name": "PMSHInstance0", + "version": "1.0.1", + "definition": { + "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition", + "version": "1.2.3" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "PMSH control loop instance 0", + "elements": { + "709c62b3-8918-41b9-a747-d21eb79c6c20": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c20", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", + "version": "2.3.4" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "DCAE Control Loop Element for the PMSH instance 0 control loop" + }, + "709c62b3-8918-41b9-a747-d21eb79c6c21": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c21", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop" + }, + "709c62b3-8918-41b9-a747-d21eb79c6c22": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c22", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop" + } + } + } + ] +} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/fullTemplate.json b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/fullTemplate.json new file mode 100644 index 0000000..8b77554 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/fullTemplate.json @@ -0,0 +1,2194 @@ +{ + "policy_types": { + "onap.policies.Monitoring": { + "name": "onap.policies.Monitoring", + "version": "1.0.0", + "derived_from": "tosca.policies.Root", + "metadata": {}, + "description": "a base policy type for all policies that govern monitoring provisioning", + "properties": {}, + "key": { + "name": "onap.policies.Monitoring", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.policies.Monitoring", + "defined_version": "1.0.0" + }, + "onap.policies.Sirisha": { + "name": "onap.policies.Sirisha", + "version": "1.0.0", + "derived_from": "tosca.policies.Root", + "metadata": {}, + "description": "a base policy type for all policies that govern monitoring provisioning", + "properties": {}, + "key": { + "name": "onap.policies.Sirisha", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.policies.Sirisha", + "defined_version": "1.0.0" + }, + "onap.policies.controlloop.operational.Common": { + "name": "onap.policies.controlloop.operational.Common", + "version": "1.0.0", + "derived_from": "tosca.policies.Root", + "metadata": {}, + "description": "Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\nPolicy Types. This does NOT support the legacy Policy YAML policy type.\n", + "properties": { + "abatement": { + "name": "abatement", + "type": "boolean", + "type_version": "0.0.0", + "description": "Whether an abatement event message will be expected for the control loop from DCAE.", + "default_value": false, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "operations": { + "name": "operations", + "type": "list", + "type_version": "0.0.0", + "description": "List of operations to be performed when Control Loop is triggered.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatype.controlloop.Operation", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": null + }, + "trigger": { + "name": "trigger", + "type": "string", + "type_version": "0.0.0", + "description": "Initial operation to execute upon receiving an Onset event message for the Control Loop.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "timeout": { + "name": "timeout", + "type": "integer", + "type_version": "0.0.0", + "description": "Overall timeout for executing all the operations. This timeout should equal or exceed the total\ntimeout for each operation listed.\n", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "id": { + "name": "id", + "type": "string", + "type_version": "0.0.0", + "description": "The unique control loop id.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "key": { + "name": "onap.policies.controlloop.operational.Common", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.policies.controlloop.operational.Common", + "defined_version": "1.0.0" + }, + "onap.policies.controlloop.operational.common.Apex": { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0", + "derived_from": "onap.policies.controlloop.operational.Common", + "metadata": {}, + "description": "Operational policies for Apex PDP", + "properties": { + "engineServiceParameters": { + "name": "engineServiceParameters", + "type": "string", + "type_version": "0.0.0", + "description": "The engine parameters like name, instanceCount, policy implementation, parameters etc.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "eventOutputParameters": { + "name": "eventOutputParameters", + "type": "string", + "type_version": "0.0.0", + "description": "The event output parameters.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "javaProperties": { + "name": "javaProperties", + "type": "string", + "type_version": "0.0.0", + "description": "Name/value pairs of properties to be set for APEX if needed.", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "eventInputParameters": { + "name": "eventInputParameters", + "type": "string", + "type_version": "0.0.0", + "description": "The event input parameters.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "key": { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.policies.controlloop.operational.common.Apex", + "defined_version": "1.0.0" + }, + "onap.policies.monitoring.dcae-pm-subscription-handler": { + "name": "onap.policies.monitoring.dcae-pm-subscription-handler", + "version": "1.0.0", + "derived_from": "onap.policies.Monitoring", + "metadata": {}, + "description": null, + "properties": { + "pmsh_policy": { + "name": "pmsh_policy", + "type": "onap.datatypes.monitoring.subscription", + "type_version": "0.0.0", + "description": "PMSH Policy JSON", + "default_value": null, + "required": false, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + } + }, + "key": { + "name": "onap.policies.monitoring.dcae-pm-subscription-handler", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.policies.monitoring.dcae-pm-subscription-handler", + "defined_version": "1.0.0" + } + }, + "node_types": { + "org.onap.policy.clamp.controlloop.CDSControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.CDSControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "cds_blueprint_id": { + "name": "cds_blueprint_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.CDSControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.CDSControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.ControlLoop": { + "name": "org.onap.policy.clamp.controlloop.ControlLoop", + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "metadata": {}, + "description": null, + "properties": { + "elements": { + "name": "elements", + "type": "list", + "type_version": "0.0.0", + "description": "Specifies a list of control loop element definitions that make up this control loop definition", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": { + "common": "true" + } + }, + "provider": { + "name": "provider", + "type": "string", + "type_version": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.ControlLoop", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.ControlLoop", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.ControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "metadata": {}, + "description": null, + "properties": { + "runningToPassiveTimeout": { + "name": "runningToPassiveTimeout", + "type": "integer", + "type_version": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from running to passive", + "default_value": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "valid_values": null, + "equal": null, + "greater_than": null, + "greater_or_equal": "0", + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "participantType": { + "name": "participantType", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": "The identity of the participant type that hosts this type of Control Loop Element", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "provider": { + "name": "provider", + "type": "string", + "type_version": "0.0.0", + "description": "Specifies the organization that provides the control loop element", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "startPhase": { + "name": "startPhase", + "type": "integer", + "type_version": "0.0.0", + "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously", + "default_value": null, + "required": false, + "status": null, + "constraints": [ + { + "valid_values": null, + "equal": null, + "greater_than": null, + "greater_or_equal": "0", + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "passiveToUninitializedTimeout": { + "name": "passiveToUninitializedTimeout", + "type": "integer", + "type_version": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized", + "default_value": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "valid_values": null, + "equal": null, + "greater_than": null, + "greater_or_equal": "0", + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "uninitializedToPassiveTimeout": { + "name": "uninitializedToPassiveTimeout", + "type": "integer", + "type_version": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive", + "default_value": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "valid_values": null, + "equal": null, + "greater_than": null, + "greater_or_equal": "0", + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "participant_id": { + "name": "participant_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + }, + "passiveToRunningTimeout": { + "name": "passiveToRunningTimeout", + "type": "integer", + "type_version": "0.0.0", + "description": "The maximum time in seconds to wait for a state chage from passive to running", + "default_value": 60.0, + "required": false, + "status": null, + "constraints": [ + { + "valid_values": null, + "equal": null, + "greater_than": null, + "greater_or_equal": "0", + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": { + "common": "true" + } + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "policy_id": { + "name": "policy_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "policy_type_id": { + "name": "policy_type_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "policy_id": { + "name": "policy_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "policy_type_id": { + "name": "policy_type_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.HttpControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "httpHeaders": { + "name": "httpHeaders", + "type": "map", + "type_version": "0.0.0", + "description": "HTTP headers to send on REST requests", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": null + }, + "baseUrl": { + "name": "baseUrl", + "type": "string", + "type_version": "0.0.0", + "description": "The base URL to be prepended to each path, identifies the host for the REST endpoints.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "configurationEntities": { + "name": "configurationEntities", + "type": "map", + "type_version": "0.0.0", + "description": "The connfiguration entities the Control Loop Element is managing and their associated REST requests", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "values": { + "name": "values", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "templates": { + "name": "templates", + "type": "list", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "chart": { + "name": "chart", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "requirements": { + "name": "requirements", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "configs": { + "name": "configs", + "type": "list", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.Participant": { + "name": "org.onap.policy.clamp.controlloop.Participant", + "version": "1.0.1", + "derived_from": "tosca.nodetypes.Root", + "metadata": {}, + "description": null, + "properties": { + "provider": { + "name": "provider", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.Participant", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.Participant", + "defined_version": "1.0.1" + }, + "org.onap.policy.clamp.controlloop.PolicyControlLoopElement": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.1", + "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "metadata": {}, + "description": null, + "properties": { + "policy_id": { + "name": "policy_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "policy_type_id": { + "name": "policy_type_id", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "requirements": null, + "key": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.1" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "defined_version": "1.0.1" + } + }, + "topology_template": { + "description": null, + "inputs": { + "pmsh_operational_policy": { + "name": "pmsh_operational_policy", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "value": null + }, + "pmsh_monitoring_policy": { + "name": "pmsh_monitoring_policy", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "value": null + } + }, + "node_templates": { + "org.onap.controlloop.HttpControlLoopParticipant": { + "name": "org.onap.controlloop.HttpControlLoopParticipant", + "version": "2.3.4", + "derived_from": null, + "metadata": {}, + "description": "Participant for Http requests", + "type": "org.onap.policy.clamp.controlloop.Participant", + "type_version": "1.0.1", + "properties": { + "provider": "ONAP" + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.controlloop.HttpControlLoopParticipant", + "version": "2.3.4" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.Participant", + "version": "1.0.1" + }, + "key": { + "name": "org.onap.controlloop.HttpControlLoopParticipant", + "version": "2.3.4" + }, + "defined_name": "org.onap.controlloop.HttpControlLoopParticipant", + "defined_version": "2.3.4" + }, + "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop element for the http requests of PMSH microservice", + "type": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "type_version": "1.0.1", + "properties": { + "participantType": { + "name": "org.onap.k8s.controlloop.HttpControlLoopParticipant", + "version": "2.3.4" + }, + "configurationEntities": [ + { + "configurationEntityId": { + "name": "entity1", + "version": "1.0.1" + }, + "restSequence": [ + { + "restRequestId": { + "name": "request1", + "version": "1.0.1" + }, + "httpMethod": "PUT", + "path": "v1/kv/dcae-pmsh2", + "body": "{ \"control_loop_name\":\"pmsh-control-loop\", \"operational_policy_name\":\"pmsh-operational-policy\", \"aaf_password\":\"demo123456!\", \"aaf_identity\":\"dcae@dcae.onap.org\", \"cert_path\":\"/opt/app/pmsh/etc/certs/cert.pem\", \"key_path\":\"/opt/app/pmsh/etc/certs/key.pem\", \"ca_cert_path\":\"/opt/app/pmsh/etc/certs/cacert.pem\", \"enable_tls\":\"true\", \"pmsh_policy\":{ \"subscription\":{ \"subscriptionName\":\"ExtraPM-All-gNB-R2B\", \"administrativeState\":\"UNLOCKED\", \"fileBasedGP\":15, \"fileLocation\":\"\/pm\/pm.xml\", \"nfFilter\":{ \"nfNames\":[ \"^pnf.*\", \"^vnf.*\" ], \"modelInvariantIDs\":[ ], \"modelVersionIDs\":[ ], \"modelNames\":[ ] }, \"measurementGroups\":[ { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"countera\" }, { \"measurementType\":\"counterb\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dna\" }, { \"DN\":\"dnb\" } ] } }, { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"counterc\" }, { \"measurementType\":\"counterd\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dnc\" }, { \"DN\":\"dnd\" } ] } } ] } }, \"streams_subscribes\":{ \"aai_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/AAI_EVENT\", \"client_role\":\"org.onap.dcae.aaiSub\", \"location\":\"san-francisco\", \"client_id\":\"1575976809466\" } }, \"policy_pm_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmSubscriber\", \"location\":\"san-francisco\", \"client_id\":\"1575876809456\" } } }, \"streams_publishes\":{ \"policy_pm_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmPublisher\", \"location\":\"san-francisco\", \"client_id\":\"1475976809466\" } }, \"other_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.SOME_OTHER_TOPIC\", \"client_role\":\"org.onap.dcae.pmControlPub\", \"location\":\"san-francisco\", \"client_id\":\"1875976809466\" } } } }", + "expectedResponse": 200 + } + ] + } + ], + "provider": "ONAP", + "startPhase": 1, + "uninitializedToPassiveTimeout": 180, + "httpHeaders": { + "Content-Type": "application/json" + }, + "participant_id": { + "name": "HttpParticipant0", + "version": "1.0.0" + }, + "baseUrl": "http://10.152.183.51:8500" + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "version": "1.0.1" + }, + "key": { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop element for the operational policy for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "org.onap.PM_Policy", + "version": "1.0.0" + }, + "policy_type_id": { + "name": "onap.policies.operational.pm-subscription-handler", + "version": "1.0.0" + }, + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "provider": "Ericsson", + "policy_id": { + "get_input": "pmsh_operational_policy" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop element for the K8S microservice for local chart", + "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "K8sParticipant0", + "version": "1.0.0" + }, + "provider": "ONAP", + "chart": { + "chartId": { + "name": "nginx-ingress", + "version": "0.9.1" + }, + "releaseName": "nginxms", + "namespace": "test" + }, + "participantType": { + "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "version": "2.3.4" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop element for the monitoring policy for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "org.onap.PM_Policy", + "version": "1.0.0" + }, + "policy_type_id": { + "name": "onap.policies.monitoring.pm-subscription-handler", + "version": "1.0.0" + }, + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "provider": "Ericsson", + "policy_id": { + "get_input": "pmsh_monitoring_policy" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.k8s.controlloop.K8SControlLoopParticipant": { + "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "version": "2.3.4", + "derived_from": null, + "metadata": {}, + "description": "Participant for K8S", + "type": "org.onap.policy.clamp.controlloop.Participant", + "type_version": "1.0.1", + "properties": { + "provider": "ONAP" + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "version": "2.3.4" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.Participant", + "version": "1.0.1" + }, + "key": { + "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "version": "2.3.4" + }, + "defined_name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "defined_version": "2.3.4" + }, + "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "org.onap.PM_Policy", + "version": "1.0.0" + }, + "provider": "Ericsson", + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.domain.sample.GenericK8s_ControlLoopDefinition": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop for Hello World", + "type": "org.onap.policy.clamp.controlloop.ControlLoop", + "type_version": "1.0.0", + "properties": { + "elements": [ + { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "version": "1.2.3" + }, + { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "version": "1.2.3" + } + ], + "provider": "ONAP" + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.ControlLoop", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.sample.GenericK8s_ControlLoopDefinition", + "defined_version": "1.2.3" + }, + "org.onap.policy.controlloop.PolicyControlLoopParticipant": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1", + "derived_from": null, + "metadata": {}, + "description": "Participant for DCAE microservices", + "type": "org.onap.policy.clamp.controlloop.Participant", + "type_version": "1.0.1", + "properties": { + "provider": "ONAP" + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.Participant", + "version": "1.0.1" + }, + "key": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + }, + "defined_name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "defined_version": "2.3.1" + }, + "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop element for the K8S microservice for PMSH", + "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "K8sParticipant0", + "version": "1.0.0" + }, + "provider": "ONAP", + "chart": { + "chartId": { + "name": "dcae-pmsh", + "version": "8.0.0" + }, + "namespace": "onap", + "releaseName": "pmshms", + "repository": { + "repoName": "chartmuseum", + "protocol": "http", + "address": "10.152.183.120", + "port": 80, + "userName": "onapinitializer", + "password": "demo123456!" + }, + "overrideParams": { + "global.masterPassword": "test" + } + }, + "participantType": { + "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "version": "2.3.4" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "defined_version": "1.2.3" + }, + "org.onap.domain.pmsh.DerivedPolicyControlLoopElement": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3", + "derived_from": null, + "metadata": {}, + "description": "Control loop for Performance Management Subscription Handling", + "type": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "type_version": "1.0.0", + "properties": { + "participant_id": { + "name": "org.onap.PM_Policy", + "version": "1.0.0" + }, + "provider": "Ericsson", + "participantType": { + "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "version": "2.3.1" + } + }, + "requirements": null, + "capabilities": null, + "identifier": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "type_identifier": { + "name": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "version": "1.0.0" + }, + "key": { + "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "version": "1.2.3" + }, + "defined_name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "defined_version": "1.2.3" + } + }, + "policies": null, + "policies_as_map": {} + }, + "tosca_definitions_version": "tosca_simple_yaml_1_3", + "data_types": { + "onap.datatype.controlloop.Actor": { + "name": "onap.datatype.controlloop.Actor", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": "An actor/operation/target definition", + "properties": { + "payload": { + "name": "payload", + "type": "map", + "type_version": "0.0.0", + "description": "Name/value pairs of payload information passed by Policy to the actor", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": { + "clamp_possible_values": "ClampExecution:CDS/payload" + } + }, + "target": { + "name": "target", + "type": "onap.datatype.controlloop.Target", + "type_version": "0.0.0", + "description": "The resource the operation should be performed on.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "actor": { + "name": "actor", + "type": "string", + "type_version": "0.0.0", + "description": "The actor performing the operation.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "clamp_possible_values": "Dictionary:DefaultActors,ClampExecution:CDS/actor" + } + }, + "operation": { + "name": "operation", + "type": "string", + "type_version": "0.0.0", + "description": "The operation the actor is performing.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": { + "clamp_possible_values": "Dictionary:DefaultOperations,ClampExecution:CDS/operation" + } + } + }, + "constraints": [], + "key": { + "name": "onap.datatype.controlloop.Actor", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatype.controlloop.Actor", + "defined_version": null + }, + "onap.datatype.controlloop.Operation": { + "name": "onap.datatype.controlloop.Operation", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": "An operation supported by an actor", + "properties": { + "failure_retries": { + "name": "failure_retries", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke when the current operation has exceeded its max retries.", + "default_value": "final_failure_retries", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "id": { + "name": "id", + "type": "string", + "type_version": "0.0.0", + "description": "Unique identifier for the operation", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "failure_timeout": { + "name": "failure_timeout", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke when the time out for the operation occurs.", + "default_value": "final_failure_timeout", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "failure": { + "name": "failure", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke on Actor operation failure.", + "default_value": "final_failure", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "operation": { + "name": "operation", + "type": "onap.datatype.controlloop.Actor", + "type_version": "0.0.0", + "description": "The definition of the operation to be performed.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "failure_guard": { + "name": "failure_guard", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.", + "default_value": "final_failure_guard", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "retries": { + "name": "retries", + "type": "integer", + "type_version": "0.0.0", + "description": "The number of retries the actor should attempt to perform the operation.", + "default_value": 0.0, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "timeout": { + "name": "timeout", + "type": "integer", + "type_version": "0.0.0", + "description": "The amount of time for the actor to perform the operation.", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "failure_exception": { + "name": "failure_exception", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke when the current operation causes an exception.", + "default_value": "final_failure_exception", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "description": { + "name": "description", + "type": "string", + "type_version": "0.0.0", + "description": "A user-friendly description of the intent for the operation", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "success": { + "name": "success", + "type": "string", + "type_version": "0.0.0", + "description": "Points to the operation to invoke on success. A value of \"final_success\" indicates and end to the operation.", + "default_value": "final_success", + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "constraints": [], + "key": { + "name": "onap.datatype.controlloop.Operation", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatype.controlloop.Operation", + "defined_version": null + }, + "onap.datatype.controlloop.Target": { + "name": "onap.datatype.controlloop.Target", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": "Definition for a entity in A&AI to perform a control loop operation on", + "properties": { + "entityIds": { + "name": "entityIds", + "type": "map", + "type_version": "0.0.0", + "description": "Map of values that identify the resource. If none are provided, it is assumed that the\nentity that generated the ONSET event will be the target.\n", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": null + }, + "metadata": { + "clamp_possible_values": "ClampExecution:CSAR_RESOURCES" + } + }, + "targetType": { + "name": "targetType", + "type": "string", + "type_version": "0.0.0", + "description": "Category for the target type", + "default_value": null, + "required": true, + "status": null, + "constraints": [ + { + "valid_values": [ + "VNF", + "VM", + "VFMODULE", + "PNF" + ], + "equal": null, + "greater_than": null, + "greater_or_equal": null, + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "constraints": [], + "key": { + "name": "onap.datatype.controlloop.Target", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatype.controlloop.Target", + "defined_version": null + }, + "onap.datatypes.ToscaConceptIdentifier": { + "name": "onap.datatypes.ToscaConceptIdentifier", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "version": { + "name": "version", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "name": { + "name": "name", + "type": "string", + "type_version": "0.0.0", + "description": null, + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.ToscaConceptIdentifier", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.ToscaConceptIdentifier", + "defined_version": null + }, + "onap.datatypes.monitoring.managedObjectDNsBasic": { + "name": "onap.datatypes.monitoring.managedObjectDNsBasic", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "DN": { + "name": "DN", + "type": "string", + "type_version": "0.0.0", + "description": "Managed object distinguished name", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.managedObjectDNsBasic", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.managedObjectDNsBasic", + "defined_version": null + }, + "onap.datatypes.monitoring.managedObjectDNsBasics": { + "name": "onap.datatypes.monitoring.managedObjectDNsBasics", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "managedObjectDNsBasic": { + "name": "managedObjectDNsBasic", + "type": "map", + "type_version": "0.0.0", + "description": "Managed object distinguished name object", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.managedObjectDNsBasic", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.managedObjectDNsBasics", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.managedObjectDNsBasics", + "defined_version": null + }, + "onap.datatypes.monitoring.measurementGroup": { + "name": "onap.datatypes.monitoring.measurementGroup", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "measurementTypes": { + "name": "measurementTypes", + "type": "list", + "type_version": "0.0.0", + "description": "List of measurement types", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.measurementTypes", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + }, + "managedObjectDNsBasic": { + "name": "managedObjectDNsBasic", + "type": "list", + "type_version": "0.0.0", + "description": "List of managed object distinguished names", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.managedObjectDNsBasics", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.measurementGroup", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.measurementGroup", + "defined_version": null + }, + "onap.datatypes.monitoring.measurementGroups": { + "name": "onap.datatypes.monitoring.measurementGroups", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "measurementGroup": { + "name": "measurementGroup", + "type": "map", + "type_version": "0.0.0", + "description": "Measurement Group", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.measurementGroup", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.measurementGroups", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.measurementGroups", + "defined_version": null + }, + "onap.datatypes.monitoring.measurementType": { + "name": "onap.datatypes.monitoring.measurementType", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "measurementType": { + "name": "measurementType", + "type": "string", + "type_version": "0.0.0", + "description": "Measurement type", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.measurementType", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.measurementType", + "defined_version": null + }, + "onap.datatypes.monitoring.measurementTypes": { + "name": "onap.datatypes.monitoring.measurementTypes", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "measurementType": { + "name": "measurementType", + "type": "map", + "type_version": "0.0.0", + "description": "Measurement type object", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.measurementType", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.measurementTypes", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.measurementTypes", + "defined_version": null + }, + "onap.datatypes.monitoring.nfFilter": { + "name": "onap.datatypes.monitoring.nfFilter", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "modelVersionIDs": { + "name": "modelVersionIDs", + "type": "list", + "type_version": "0.0.0", + "description": "List of model version IDs", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + }, + "modelInvariantIDs": { + "name": "modelInvariantIDs", + "type": "list", + "type_version": "0.0.0", + "description": "List of model invariant IDs", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + }, + "modelNames": { + "name": "modelNames", + "type": "list", + "type_version": "0.0.0", + "description": "List of model names", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + }, + "nfNames": { + "name": "nfNames", + "type": "list", + "type_version": "0.0.0", + "description": "List of network functions", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "string", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.nfFilter", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.nfFilter", + "defined_version": null + }, + "onap.datatypes.monitoring.subscription": { + "name": "onap.datatypes.monitoring.subscription", + "version": "0.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "measurementGroups": { + "name": "measurementGroups", + "type": "list", + "type_version": "0.0.0", + "description": "Measurement Groups", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.measurementGroups", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + }, + "fileBasedGP": { + "name": "fileBasedGP", + "type": "integer", + "type_version": "0.0.0", + "description": "File based granularity period", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + }, + "fileLocation": { + "name": "fileLocation", + "type": "string", + "type_version": "0.0.0", + "description": "ROP file location", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + }, + "subscriptionName": { + "name": "subscriptionName", + "type": "string", + "type_version": "0.0.0", + "description": "Name of the subscription", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": {} + }, + "administrativeState": { + "name": "administrativeState", + "type": "string", + "type_version": "0.0.0", + "description": "State of the subscription", + "default_value": null, + "required": true, + "status": null, + "constraints": [ + { + "valid_values": [ + "LOCKED", + "UNLOCKED" + ], + "equal": null, + "greater_than": null, + "greater_or_equal": null, + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": {} + }, + "nfFilter": { + "name": "nfFilter", + "type": "map", + "type_version": "0.0.0", + "description": "Network function filter", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": { + "name": null, + "type": "onap.datatypes.monitoring.nfFilter", + "type_version": "0.0.0", + "description": null, + "constraints": [] + }, + "metadata": {} + } + }, + "constraints": [], + "key": { + "name": "onap.datatypes.monitoring.subscription", + "version": "0.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "onap.datatypes.monitoring.subscription", + "defined_version": null + }, + "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest": { + "name": "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest", + "version": "1.0.0", + "derived_from": "tosca.datatypes.Root", + "metadata": {}, + "description": null, + "properties": { + "body": { + "name": "body", + "type": "string", + "type_version": "0.0.0", + "description": "The body of the REST request for PUT and POST requests", + "default_value": null, + "required": false, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "expectedResponse": { + "name": "expectedResponse", + "type": "integer", + "type_version": "0.0.0", + "description": "THe expected HTTP status code for the REST request", + "default_value": null, + "required": true, + "status": null, + "constraints": [], + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "httpMethod": { + "name": "httpMethod", + "type": "string", + "type_version": "0.0.0", + "description": "The REST method to use", + "default_value": null, + "required": true, + "status": null, + "constraints": [ + { + "valid_values": [ + "POST", + "PUT", + "GET", + "DELETE" + ], + "equal": null, + "greater_than": null, + "greater_or_equal": null, + "less_than": null, + "less_or_equal": null, + "range_values": null + } + ], + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "restRequestId": { + "name": "restRequestId", + "type": "onap.datatypes.ToscaConceptIdentifier", + "type_version": "0.0.0", + "description": "The name and version of a REST request to be sent to a REST endpoint", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + }, + "path": { + "name": "path", + "type": "string", + "type_version": "0.0.0", + "description": "The path of the REST request relative to the base URL", + "default_value": null, + "required": true, + "status": null, + "constraints": null, + "key_schema": null, + "entry_schema": null, + "metadata": null + } + }, + "constraints": [], + "key": { + "name": "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest", + "version": "1.0.0" + }, + "type": null, + "type_version": null, + "defined_name": "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest", + "defined_version": "1.0.0" + } + } +} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/jsonEditorData.json b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/jsonEditorData.json new file mode 100644 index 0000000..c09424f --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/jsonEditorData.json @@ -0,0 +1,50 @@ +{ + "__data": [ + "Object" + ], + "copyClipboard": null, + "editors": [ + "Object" + ], + "element": "<div … />", + "expandRefs": [ + "Function anonymous" + ], + "expandSchema": [ + "Function anonymous" + ], + "iconlib": [ + "n" + ], + "options": [ + "Object" + ], + "ready": true, + "refs": [ + "Object" + ], + "root": [ + "o" + ], + "root_container": "<div … />", + "schema": [ + "Object" + ], + "template": "undefined", + "theme": [ + "o" + ], + "translate": [ + "Function translate" + ], + "translateProperty": [ + "Function translateProperty" + ], + "uuid": 0, + "validation_results": [ + "Array" + ], + "validator": [ + "t" + ] +} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/orderedStateJson.json b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/orderedStateJson.json new file mode 100644 index 0000000..91c892d --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/testFiles/orderedStateJson.json @@ -0,0 +1,9 @@ +{ + "orderedState": "PASSIVE", + "controlLoopIdentifierList": [ + { + "name": "PMSH_Instance1", + "version": "2.3.1" + } + ] +} diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.js new file mode 100644 index 0000000..2d98598 --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.js @@ -0,0 +1,178 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +import { JSONEditor } from "@json-editor/json-editor"; +import { Alert } from "react-bootstrap"; +import React from "react"; + +const CommissioningUtils = { + makeSchemaForCommonProperties: (commonProps) => { + const commonPropsArr = Object.entries(commonProps) + + const newSchemaObject = {} + + newSchemaObject.title = "CommonProperties" + newSchemaObject.type = "object" + newSchemaObject.properties = {} + + commonPropsArr.forEach(([templateKey, template]) => { + + const propertiesObject = {} + Object.entries(template.properties).forEach(([propKey, prop]) => { + + propertiesObject[propKey] = { + type: CommissioningUtils.getType(prop.type) + } + + }) + newSchemaObject.properties[templateKey] = { + options: { + "collapsed": true + }, + properties: propertiesObject + } + }) + + return newSchemaObject + }, + getType: (propertyType) => { + switch (propertyType) + { + case "string": + return "string" + case "integer": + return "integer" + case "list": + return "array" + case "object": + return "object" + default: + return "object" + } + }, + createJsonEditor: (toscaModel, editorData) => { + JSONEditor.defaults.options.collapse = false; + + return new JSONEditor(document.getElementById("editor"), + { + schema: toscaModel, + startval: editorData, + theme: 'bootstrap4', + iconlib: 'fontawesome5', + object_layout: 'normal', + disable_properties: false, + disable_edit_json: true, + disable_array_reorder: true, + disable_array_delete_last_row: true, + disable_array_delete_all_rows: false, + array_controls_top: true, + keep_oneof_values: false, + collapsed: false, + show_errors: 'always', + display_required_only: false, + show_opt_in: false, + prompt_before_delete: true, + required_by_default: false, + }) + }, + renderJsonEditor: async (template, commonProps) => { + + const fullTemplate = await template.json() + + let toscaInitialValues + const allNodeTemplates = fullTemplate.topology_template.node_templates + const shortenedNodeTemplatesObjectStartValues = {} + // Get the common properties to construct a schema + // Get valid start values at the same time + const commonNodeTemplatesJson = await commonProps.json().then(data => { + const nodeTemplatesArray = Object.entries(data) + const shortenedNodeTemplatesObject = {} + nodeTemplatesArray.forEach(([key, temp]) => { + const currentNodeTemplate = allNodeTemplates[key] + const propertiesObject = { + properties: temp.properties + } + + shortenedNodeTemplatesObject[key] = propertiesObject + + const propertiesStartValues = {} + + // Get all the existing start values to populate the properties in the schema + Object.entries(propertiesObject.properties).forEach(([propKey, prop]) => { + propertiesStartValues[propKey] = currentNodeTemplate.properties[propKey] + }) + + shortenedNodeTemplatesObjectStartValues[key] = propertiesStartValues + + }) + + toscaInitialValues = shortenedNodeTemplatesObjectStartValues; + return shortenedNodeTemplatesObject; + }) + + const propertySchema = CommissioningUtils.makeSchemaForCommonProperties(commonNodeTemplatesJson); + + const editorTemp = CommissioningUtils.createJsonEditor(propertySchema, shortenedNodeTemplatesObjectStartValues); + + return { + fullTemplate: fullTemplate, + propertySchema: propertySchema, + editorTemp: editorTemp, + toscaInitialValues: toscaInitialValues + } + }, + getAlertMessages: async (response) => { + if (response.ok) { + return(<Alert variant="success"> + <Alert.Heading>Commissioning Success</Alert.Heading> + <p>Altered Template was Successfully Uploaded</p> + <hr/> + </Alert>); + } + else { + return(<Alert variant="danger"> + <Alert.Heading>Commissioning Failure</Alert.Heading> + <p>Updated Template Failed to Upload</p> + <p>Status code: { await response.status }: { response.statusText }</p> + <p>Response Text: { await response.text() }</p> + <hr/> + </Alert>); + } + }, + + updateTemplate: async (userAddedCommonPropValues, fullToscaTemplate) => { + const nodeTemplates = fullToscaTemplate.topology_template.node_templates + const commonPropertyDataEntries = Object.entries(userAddedCommonPropValues) + + // This replaces the values for properties in the full tosca template + // that will be sent up to the api with the entries the user provided. + commonPropertyDataEntries.forEach(([templateKey, values]) => { + Object.entries(values).forEach(([propKey, propVal]) => { + nodeTemplates[templateKey].properties[propKey] = propVal + }) + }) + + fullToscaTemplate.topology_template.node_templates = nodeTemplates + + alert('Changes saved. Commission When Ready...') + return fullToscaTemplate + } +} + +export default CommissioningUtils; diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.test.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.test.js new file mode 100644 index 0000000..8304ecb --- /dev/null +++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/CommissioningUtils.test.js @@ -0,0 +1,94 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +import commonProps from "../testFiles/commonProps.json"; +import fullTemp from "../testFiles/fullTemplate.json"; +import CommissioningUtils from "./CommissioningUtils"; +import React from "react"; + +const commonProperties = JSON.parse(JSON.stringify(commonProps)) +const fullTemplate = JSON.parse(JSON.stringify(fullTemp)) + +describe('Verify CommissioningUtils', () => { + + const fullTemplatePromise = { + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(fullTemplate) + } + } + + const commonPropertiesPromise = { + ok: true, + status: 200, + text: () => "OK", + json: () => { + return Promise.resolve(commonProperties) + } + } + + it('test renderJsonEditor output is correct', async () => { + // Have to mock "editor" dom element for json editor to work in testing + document.body.innerHTML = '<div id="editor"></div>'; + + await expect((await CommissioningUtils.renderJsonEditor(fullTemplatePromise, commonPropertiesPromise)).editorTemp).toBeTruthy() + await expect((await CommissioningUtils.renderJsonEditor(fullTemplatePromise, commonPropertiesPromise)).fullTemplate).toBeTruthy() + await expect((await CommissioningUtils.renderJsonEditor(fullTemplatePromise, commonPropertiesPromise)).propertySchema).toBeTruthy() + await expect((await CommissioningUtils.renderJsonEditor(fullTemplatePromise, commonPropertiesPromise)).toscaInitialValues).toBeTruthy() + }) + + it('test the getType method object type', () => { + expect(CommissioningUtils.getType("object")).toBe("object") + }) + + it('test getAlertMessages with response ok', async () => { + const response = { + ok: true, + status: 200, + text: () => { + return Promise.resolve("OK") + }, + json: () => { + return Promise.resolve("{}") + } + } + + await expect(JSON.stringify(await CommissioningUtils.getAlertMessages(response))).toContain("Commissioning Success") + }) + + it('test getAlertMessages with response not ok', async () => { + const response = { + ok: false, + status: 200, + text: () => { + return Promise.resolve("Error") + }, + json: () => { + return Promise.resolve("{}") + } + } + + await expect(JSON.stringify(await CommissioningUtils.getAlertMessages(response))).toContain("Commissioning Failure") + }) + + + } +) |