diff options
author | Einat Vinouze <einat.vinouze@intl.att.com> | 2019-08-27 16:01:01 +0300 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2019-09-09 07:01:36 +0000 |
commit | e1f7974f0badbd4440d5b7ea5f1b1cb2d4973818 (patch) | |
tree | 46be9cdc44cbb475527bc3c43df23d16f7579d29 /vid-webpack-master/src/app/shared/storeUtil/utils/service | |
parent | e25b88b5a7a0f3bf63ca7160a441b53145484bcc (diff) |
Adding feature: Replace vfmodule
Issue-ID: VID-603
Change-Id: I59068a0979d6fb733e4243c8f78921f396dc9d17
Signed-off-by: Einat Vinouze <einat.vinouze@intl.att.com>
Signed-off-by: Amichai Hemli <amichai.hemli@intl.att.com>
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-webpack-master/src/app/shared/storeUtil/utils/service')
3 files changed, 169 insertions, 62 deletions
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts index e4e7e494e..069ef82e8 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts @@ -10,7 +10,9 @@ export enum ServiceActions { ADD_SERVICE_ACTION = 'ADD_SERVICE_ACTION', DELETE_ACTION_SERVICE_INSTANCE = "DELETE_ACTION_SERVICE_INSTANCE", UNDO_DELETE_ACTION_SERVICE_INSTANCE = "UNDO_DELETE_ACTION_SERVICE_INSTANCE", - CHANGE_SERVICE_IS_DIRTY = "CHANGE_SERVICE_IS_DIRTY" + CHANGE_SERVICE_IS_DIRTY = "CHANGE_SERVICE_IS_DIRTY", + UPGRADE_SERVICE_ACTION = "UPGRADE_SERVICE_ACTION", + UNDO_UPGRADE_SERVICE_ACTION = "UNDO_UPGRADE_SERVICE_ACTION" } export interface CreateServiceInstanceAction extends Action { @@ -40,6 +42,13 @@ export interface AddServiceAction extends Action{ action: ServiceInstanceActions; } +export interface UpgradeServiceAction extends Action{ + serviceUuid: string; +} + +export interface UndoUpgradeServiceAction extends Action{ + serviceUuid: string; +} export interface DeleteActionServiceInstanceAction extends Action { serviceId?: string; @@ -99,4 +108,12 @@ export const changeServiceIsDirty: ActionCreator<ChangeServiceDirty> = (nodes, s serviceId : serviceId }); +export const upgradeService: ActionCreator<UpgradeServiceAction> = (serviceUuid : string) => ({ + type: ServiceActions.UPGRADE_SERVICE_ACTION, + serviceUuid +}); +export const undoUpgradeService: ActionCreator<UndoUpgradeServiceAction> = (serviceUuid : string) => ({ + type: ServiceActions.UNDO_UPGRADE_SERVICE_ACTION, + serviceUuid +}); diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts index cff944563..ba8b3826e 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts @@ -6,7 +6,7 @@ import { DeleteServiceInstanceAction, ServiceActions, UpdateServiceInstanceAction, - UpdateServiceModelAction + UpdateServiceModelAction, UpgradeServiceAction } from "./service.actions"; import {serviceReducer} from "./service.reducers"; import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; @@ -513,7 +513,62 @@ describe('serviceReducer', () => { expect(state.serviceInstance['serviceId'].isDirty).toBeTruthy(); }); -}); + test('#UPGRADE_SERVICE should update service action to _Upgrade', () => { + const state = serviceReducer(<any>{ + serviceInstance: { + 'serviceId': { + action: ServiceInstanceActions.None, + upgradedVFMSonsCounter: 0, + 'vnfs': { + 'vnf1': { + action: ServiceInstanceActions.None + }, + 'vnf2': { + action: ServiceInstanceActions.Create + } + } + + } + } + }, + <UpgradeServiceAction> { + type: ServiceActions.UPGRADE_SERVICE_ACTION, + serviceUuid: 'serviceId' + }); + + expect(state.serviceInstance['serviceId'].isUpgraded).toBeTruthy(); + expect(state.serviceInstance['serviceId'].action).toEqual(ServiceInstanceActions.None_Upgrade); + expect(state.serviceInstance['serviceId'].upgradedVFMSonsCounter).toEqual(1); + }); + test('#UNDO_UPGRADE_SERVICE should cancel the upgrade action back to None', () => { + const state = serviceReducer(<any>{ + serviceInstance: { + 'serviceId': { + isUpgraded: true, + upgradedVFMSonsCounter: 1, + action: ServiceInstanceActions.None_Upgrade, + 'vnfs': { + 'vnf1': { + action: ServiceInstanceActions.None_Upgrade + }, + 'vnf2': { + action: ServiceInstanceActions.Create + } + } + } + } + }, + <UpgradeServiceAction> { + type: ServiceActions.UNDO_UPGRADE_SERVICE_ACTION, + serviceUuid: 'serviceId' + }); + + expect(state.serviceInstance['serviceId'].isUpgraded).toBeFalsy(); + expect(state.serviceInstance['serviceId'].action).toEqual(ServiceInstanceActions.None); + expect(state.serviceInstance['serviceId'].upgradedVFMSonsCounter).toEqual(0); + }); + +}); diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts index c6d3da52a..811238385 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts @@ -4,8 +4,10 @@ import { ChangeServiceDirty, CreateServiceInstanceAction, ServiceActions, + UndoUpgradeServiceAction, UpdateServiceInstanceAction, - UpdateServiceModelAction + UpdateServiceModelAction, + UpgradeServiceAction } from "./service.actions"; import {ServiceInstance} from "../../../models/serviceInstance"; import {ServiceState} from "../main.reducer"; @@ -13,84 +15,99 @@ import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; import * as _ from "lodash"; export function serviceReducer(state: ServiceState, action: Action) : ServiceState{ - switch (action.type) { - case ServiceActions.UPDATE_SERVICE_INSTANCE : { - let newState = _.cloneDeep(state); - const updateServiceInstanceAction = <UpdateServiceInstanceAction>action; - const uuid = updateServiceInstanceAction.serviceUuid; - const serviceInstance = updateServiceInstanceAction.serviceInstance; + switch (action.type) { + case ServiceActions.UPDATE_SERVICE_INSTANCE : { + let newState = _.cloneDeep(state); + const updateServiceInstanceAction = <UpdateServiceInstanceAction>action; + const uuid = updateServiceInstanceAction.serviceUuid; + const serviceInstance = updateServiceInstanceAction.serviceInstance; - updateUniqueNames(serviceInstance.instanceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]); + updateUniqueNames(serviceInstance.instanceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]); - newState.serviceInstance[uuid] = _.merge(newState.serviceInstance[uuid], serviceInstance); - return newState; - } - case ServiceActions.CREATE_SERVICE_INSTANCE : { - const updateServiceInstanceAction = <CreateServiceInstanceAction>action; - const uuid = updateServiceInstanceAction.serviceUuid; - let newState = _.cloneDeep(state); + newState.serviceInstance[uuid] = _.merge(newState.serviceInstance[uuid], serviceInstance); + return newState; + } + case ServiceActions.CREATE_SERVICE_INSTANCE : { + const updateServiceInstanceAction = <CreateServiceInstanceAction>action; + const uuid = updateServiceInstanceAction.serviceUuid; + let newState = _.cloneDeep(state); - const serviceInstance: ServiceInstance = new ServiceInstance(); - const currentInstaceName = state.serviceInstance[uuid] ? serviceInstance.instanceName : null; + const serviceInstance: ServiceInstance = new ServiceInstance(); + const currentInstaceName = state.serviceInstance[uuid] ? serviceInstance.instanceName : null; - newState.serviceInstance[uuid] = Object.assign(serviceInstance, updateServiceInstanceAction.serviceInstance); - newState.serviceInstance[uuid].vidNotions = _.get(state,`serviceHierarchy[${uuid}].service.vidNotions`); - if (!_.isNil(updateServiceInstanceAction.serviceInstance)) { - updateUniqueNames(currentInstaceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]); - } - return newState; - } - case ServiceActions.DELETE_ALL_SERVICE_INSTANCES: { - if (state.serviceInstance) { - let newState = _.cloneDeep(state); - newState.serviceInstance = {}; - return Object.assign({}, state, newState); - } - return Object.assign({}, state); + newState.serviceInstance[uuid] = Object.assign(serviceInstance, updateServiceInstanceAction.serviceInstance); + newState.serviceInstance[uuid].vidNotions = _.get(state,`serviceHierarchy[${uuid}].service.vidNotions`); + if (!_.isNil(updateServiceInstanceAction.serviceInstance)) { + updateUniqueNames(currentInstaceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]); } - case ServiceActions.UPDATE_MODEL: { - let uuid = (<UpdateServiceModelAction>action).serviceHierarchy.service.uuid; - state.serviceHierarchy[uuid] = _.cloneDeep((<UpdateServiceModelAction>action).serviceHierarchy); - return Object.assign({}, state); + return newState; + } + case ServiceActions.DELETE_ALL_SERVICE_INSTANCES: { + if (state.serviceInstance) { + let newState = _.cloneDeep(state); + newState.serviceInstance = {}; + return Object.assign({}, state, newState); } - case ServiceActions.ADD_SERVICE_ACTION: { - const uuid: string = (<AddServiceAction>action).serviceUuid; - const actionToAdd: ServiceInstanceActions = (<AddServiceAction>action).action; - state.serviceInstance[uuid].action = actionToAdd; - return Object.assign({}, state); + return Object.assign({}, state); + } + case ServiceActions.UPDATE_MODEL: { + let uuid = (<UpdateServiceModelAction>action).serviceHierarchy.service.uuid; + state.serviceHierarchy[uuid] = _.cloneDeep((<UpdateServiceModelAction>action).serviceHierarchy); + return Object.assign({}, state); + } + case ServiceActions.ADD_SERVICE_ACTION: { + const uuid: string = (<AddServiceAction>action).serviceUuid; + const actionToAdd: ServiceInstanceActions = (<AddServiceAction>action).action; + state.serviceInstance[uuid].action = actionToAdd; + return Object.assign({}, state); + } + case ServiceActions.CHANGE_SERVICE_IS_DIRTY : { + let newState = _.cloneDeep(state); + let serviceInstanceAction: ServiceInstanceActions = newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].action; + + if(serviceInstanceAction !== ServiceInstanceActions.None){ + newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = true; + return newState; } - case ServiceActions.CHANGE_SERVICE_IS_DIRTY : { - let newState = _.cloneDeep(state); - let serviceInstanceAction: ServiceInstanceActions = newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].action; - if(serviceInstanceAction !== ServiceInstanceActions.None){ + const nodes = (<ChangeServiceDirty>action).nodes; + for(let node of nodes){ + const dirty = isDirty(node); + if(dirty) { newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = true; return newState; } + } + newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = false; + return newState; + } + case ServiceActions.UPGRADE_SERVICE_ACTION: { + let clonedState = _.cloneDeep(state); + let oldServiceAction: string = ServiceInstanceActions.None; + const castingAction = <UpgradeServiceAction>action; + const uuid: string = castingAction.serviceUuid; + return upgradeServiceInstance(clonedState, uuid, oldServiceAction); + } - const nodes = (<ChangeServiceDirty>action).nodes; - for(let node of nodes){ - const dirty = isDirty(node); - if(dirty) { - newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = true; - return newState; - } - } - - newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = false; - return newState; + case ServiceActions.UNDO_UPGRADE_SERVICE_ACTION: { + let clonedState = _.cloneDeep(state); + const castingAction = <UndoUpgradeServiceAction>action; + const uuid: string = castingAction.serviceUuid; + if(!_.isNil(clonedState.serviceInstance[uuid].action) && clonedState.serviceInstance[uuid].action.includes("Upgrade")) { + return undoUpgradeServiceInstance(clonedState, uuid); } } + } } const isDirty = (node) : boolean => { if(node.action !== ServiceInstanceActions.None) return true; if(!_.isNil(node.children) && node.children.length > 0){ - for(let child of node.children){ - const dirty: boolean = isDirty(child); - if(dirty) return true; - } + for(let child of node.children){ + const dirty: boolean = isDirty(child); + if(dirty) return true; + } } return false; }; @@ -105,5 +122,23 @@ const updateUniqueNames = (oldName : string, newName : string, serviceInstance : } }; +function upgradeServiceInstance(clonedState, uuid: string, oldServiceAction: string) { + if(!clonedState.serviceInstance[uuid].action.includes("Upgrade")){ + clonedState.serviceInstance[uuid].action = (`${oldServiceAction}_Upgrade`) as ServiceInstanceActions; + } + clonedState.serviceInstance[uuid].isUpgraded = true; + clonedState.serviceInstance[uuid].upgradedVFMSonsCounter++; + return clonedState; +} + +function undoUpgradeServiceInstance(clonedState, uuid: string) { + clonedState.serviceInstance[uuid].upgradedVFMSonsCounter--; + if(clonedState.serviceInstance[uuid].upgradedVFMSonsCounter == 0){ + clonedState.serviceInstance[uuid].action = ServiceInstanceActions.None; + clonedState.serviceInstance[uuid].isUpgraded = false; + } + return clonedState; +} + |