summaryrefslogtreecommitdiffstats
path: root/dcaedt_tools/src/test/java/DeployTemplateTest.java
blob: f1c3d3baabc4a9d115e3611ea611e4377f3f6c6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*-
 * ============LICENSE_START=======================================================
 * SDC
 * ================================================================================
 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
 * Modifications Copyright (c) 2019 Samsung
 * ================================================================================
 * 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.
 * ============LICENSE_END=========================================================
 */

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;

import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.onap.sdc.dcae.composition.restmodels.CreateVFCMTRequest;
import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed;
import org.springframework.web.client.ResourceAccessException;

import com.google.gson.JsonObject;

import json.templateInfo.TemplateInfo;
import tools.DeployTemplate;

public class DeployTemplateTest extends BaseTest {

    @InjectMocks
    DeployTemplate deployTemplate;

    private Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap;
    private TemplateInfo vfcmtTemplateInfo;

    private static final String VERIFY_FAILED_MESSAGE =
        "Deployment verify finished with errors, found only: 1 of 2 vfcmts";
    private static final String RESOURCE_ACCESS_EXCEPTION_MESSAGE = "Permission denny!";
    private static final String CREATE_RESOURCE_FAILED_MESSAGE =
        String.format("Failed create vfcmt: %s, With general message: %s", TEMPLATE_INFO_NAME,
            RESOURCE_ACCESS_EXCEPTION_MESSAGE);
    private static final String UPDATE_RESOURCE_FAILED_MESSAGE =
        String.format("Failed update vfcmt: %s, With general message: %s", VFCMT_NAME1,
            RESOURCE_ACCESS_EXCEPTION_MESSAGE);
    private static final String NOT_UPDATE_RESOURCE_MESSAGE =
        String.format("vfcmt: %s found, but didn't update.", VFCMT_NAME1);
    private final ResourceAccessException createResourceException =
        new ResourceAccessException(RESOURCE_ACCESS_EXCEPTION_MESSAGE);
    private static final String BAD_USER_ID = "badUserId";
    private static final String OPERATION_NOT_ALLOWED_FOR_USER_MESSAGE = String.format(
        "User conflicts. Operation not allowed for user %s on resource checked out by %s",
        BAD_USER_ID, USER_ID);
    private static final String UPDATE_FAILED_MESSAGE =
        String.format("Failed update vfcmt: %s, cannot checkout vfcmt", VFCMT_NAME1);

    @Before
    @Override
    public void setup() {
        super.setup();
        super.mockGetAllVfcmt();
        super.mockCheckoutVfcmtAndCreateResource();
        when(dcaeRestClient.getUserId()).thenReturn(USER_ID);
        when(dcaeRestClient.saveComposition(any(), any())).thenReturn("Composition Created");

        templateInfoToJsonObjectMap = new HashMap<>();
        vfcmtTemplateInfo = new TemplateInfo();
        vfcmtTemplateInfo.setName(VFCMT_NAME1);
        vfcmtTemplateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
        vfcmtTemplateInfo.setCategory("category");
        vfcmtTemplateInfo.setSubCategory("subCategory");
        vfcmtTemplateInfo.setDescription("description");
        vfcmtTemplateInfo.setUpdateIfExist(true);
        templateInfoToJsonObjectMap.put(vfcmtTemplateInfo, new JsonObject());
        TemplateInfo templateInfo = new TemplateInfo();
        templateInfo.setName(TEMPLATE_INFO_NAME);
        templateInfo.setFlowType(TEMPLATE_INFO_FLOWTYPE);
        templateInfo.setCategory("category");
        templateInfo.setSubCategory("subCategory");
        templateInfo.setDescription("description");
        templateInfoToJsonObjectMap.put(templateInfo, new JsonObject());
    }

    @Test
    public void deployHappyFlow() {
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(0)).addErrorMessage(anyString());
    }

    @Test
    public void deployFailedSaving() {
        when(dcaeRestClient.saveComposition(anyString(), anyString())).thenReturn("failed");
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(4)).addErrorMessage(anyString());
    }

    @Test
    public void deployFailedVerify() {
        mockGetAllVfcmtWithBadResources();
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(1)).addErrorMessage(VERIFY_FAILED_MESSAGE);
    }

    @Test
    public void deployFailedCreateResource() {
        when(dcaeRestClient.createResource(any(CreateVFCMTRequest.class)))
            .thenThrow(createResourceException);
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(1)).addErrorMessage(CREATE_RESOURCE_FAILED_MESSAGE);
        verify(report, times(1)).setStatusCode(2);
    }

    @Test
    public void deployButOperationNotAllowForTheUser() {
        when(dcaeRestClient.getUserId()).thenReturn(BAD_USER_ID);
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(1)).addErrorMessage(OPERATION_NOT_ALLOWED_FOR_USER_MESSAGE);
        verify(report, times(1)).addErrorMessage(UPDATE_FAILED_MESSAGE);
    }

    @Test
    public void deployAndCheckVfcmt() {
        mockGetAllVfcmtWithCertifiedResource();
        deployTemplate.deploy(templateInfoToJsonObjectMap);
    }

    @Test
    public void deployAndCheckVfcmtFaild() {
        mockGetAllVfcmtWithCertifiedResource();
        when(dcaeRestClient.checkoutVfcmt(UUID1)).thenThrow(createResourceException);
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(1)).addErrorMessage(UPDATE_RESOURCE_FAILED_MESSAGE);
        verify(report, times(1)).setStatusCode(2);
    }

    @Test
    public void deployAndNotUpdate() {
        vfcmtTemplateInfo.setUpdateIfExist(false);
        deployTemplate.deploy(templateInfoToJsonObjectMap);
        verify(report, times(1)).addNotUpdatedMessage(NOT_UPDATE_RESOURCE_MESSAGE);
    }

    private void mockGetAllVfcmtWithBadResources() {
        List<ResourceDetailed> resourceDetaileds = new ArrayList<>();
        resourceDetaileds.add(createResource("NOT_CERTIFIED_CHECKOUT"));
        when(dcaeRestClient.getAllVfcmts()).thenReturn(resourceDetaileds);
    }

    private void mockGetAllVfcmtWithCertifiedResource() {
        List<ResourceDetailed> resourceDetaileds = new ArrayList<>();
        resourceDetaileds.add(createResource("READY_FOR_CERTIFICATION"));
        when(dcaeRestClient.getAllVfcmts()).thenReturn(resourceDetaileds);
    }

    private ResourceDetailed createResource(String status) {
        ResourceDetailed resourceDetailed = new ResourceDetailed();
        resourceDetailed.setName(VFCMT_NAME1);
        resourceDetailed.setUuid(UUID1);
        resourceDetailed.setLifecycleState(status);
        resourceDetailed.setLastUpdaterUserId(USER_ID);
        return resourceDetailed;
    }
}