2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Copyright (C) 2017 Amdocs
8 * =============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 * ============LICENSE_END=========================================================
25 package org.openecomp.appc;
27 import org.junit.Assert;
28 import org.junit.Test;
29 import org.openecomp.appc.domainmodel.lcm.VNFOperation;
30 import org.openecomp.appc.lifecyclemanager.LifecycleManager;
31 import org.openecomp.appc.lifecyclemanager.helper.MetadataReader;
32 import org.openecomp.appc.lifecyclemanager.impl.LifecycleManagerImpl;
33 import org.openecomp.appc.lifecyclemanager.objects.LifecycleException;
34 import org.openecomp.appc.lifecyclemanager.objects.NoTransitionDefinedException;
35 import org.openecomp.appc.statemachine.objects.*;
40 public class TestLifecycleManager {
42 private static final State[] VALID_LOCK_STATES = new State[] {
43 new State("Instantiated"),
44 new State("Configured"),
53 public void handleEvent() throws InvalidInputException, LifecycleException, NoTransitionDefinedException {
55 MetadataReader metadataReader = new MetadataReader();
56 StateMachineMetadata metadata = metadataReader.readMetadata(null);
58 LifecycleManagerImpl lifecycleManager = new LifecycleManagerImpl();
61 Testing Positive Scenario passing the valid events and validating the StateMachineResponse
63 for(State state:metadata.getStates()){
65 for(Transition transition:state.getTransitions()){
66 Event event = transition.getEvent();
67 State nextStateFromMetadata = transition.getNextState();
69 String expectedNextState = lifecycleManager.getNextState(null,state.toString(),event.toString());
70 Assert.assertEquals(expectedNextState,nextStateFromMetadata.toString());
75 Testing Negative Scenarios, 1. Passing the valid Events for which Transition is not defined in
76 Metadata and validating the StateMachineResponse 2. Passing the invalid events which are not
77 registered as events in the StateMachineMetadata and validating StateMachineResponse
79 for(State state:metadata.getStates()){
81 for(Transition transition:state.getTransitions()){
82 List<Event> negativeEvents = getNegativeEvents(state,metadata.getEvents());
84 for(Event negativeEvent:negativeEvents){
87 String response = lifecycleManager.getNextState(null,state.toString(),negativeEvent.toString());
90 catch (NoTransitionDefinedException e){
93 Assert.assertEquals(flag,true);
97 String response = lifecycleManager.getNextState(null,state.toString(),"PUT");
99 catch(LifecycleException e){
102 Assert.assertTrue(flag);
110 public void testNotOrchestratedState() throws LifecycleException, NoTransitionDefinedException {
111 LifecycleManager lifecycleManager = new LifecycleManagerImpl();
112 String nextState = lifecycleManager.getNextState(null,"NOT ORCHESTRATED",VNFOperation.Configure.toString());
113 Assert.assertEquals(nextState,"Configuring");
116 @Test(expected = NoTransitionDefinedException.class)
117 public void testBakckingUpState() throws LifecycleException, NoTransitionDefinedException {
118 LifecycleManager lifecycleManager = new LifecycleManagerImpl();
119 String nextState = lifecycleManager.getNextState(null,"Software_Uploading",VNFOperation.Configure.toString());
122 private List<Event> getNegativeEvents(State state,Set<Event> events) {
123 List<Event> negativeEventList = new ArrayList<>();
124 negativeEventList.addAll(events);
126 for(Transition transition: state.getTransitions()){
127 negativeEventList.remove(transition.getEvent());
129 return negativeEventList;
133 public void testLockStates() throws LifecycleException, NoTransitionDefinedException {
134 MetadataReader metadataReader = new MetadataReader();
135 StateMachineMetadata metadata = metadataReader.readMetadata(null);
136 LifecycleManager lifecycleManager = new LifecycleManagerImpl();
137 for(State state: metadata.getStates()) {
138 if(isValidState(state, VALID_LOCK_STATES)) {
139 assertSameNextState(lifecycleManager, state, VNFOperation.Lock);
140 assertSameNextState(lifecycleManager, state, VNFOperation.Unlock);
141 assertSameNextState(lifecycleManager, state, VNFOperation.CheckLock);
143 assertNoNextState(lifecycleManager, state, VNFOperation.Lock);
144 assertNoNextState(lifecycleManager, state, VNFOperation.Unlock);
145 assertNoNextState(lifecycleManager, state, VNFOperation.CheckLock);
150 private boolean isValidState(State state, State[] validStates) {
151 for(State validState: validStates) {
152 if(validState.equals(state)) {
159 private void assertSameNextState(LifecycleManager lifecycleManager, State state, VNFOperation operation) throws LifecycleException, NoTransitionDefinedException {
160 Assert.assertEquals(state.getStateName(), lifecycleManager.getNextState("no-matter", state.getStateName(), operation.toString()));
163 private void assertNoNextState(LifecycleManager lifecycleManager, State state, VNFOperation operation) throws LifecycleException {
165 lifecycleManager.getNextState("no-matter", state.getStateName(), operation.toString());
166 Assert.fail("lifecycleManager.getNextState() should fail for state [" + state + "], operation [" + operation + "]");
167 } catch(NoTransitionDefinedException e) {
168 // this exception is excepted