aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/test/java/org/onap/vid/job/command/VnfCommandTest.kt
blob: 75640d4af79e31a77d4e7ccb8b22f56034f2c912 (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
/*-
 * ============LICENSE_START=======================================================
 * VID
 * ================================================================================
 * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * 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=========================================================
 */

package org.onap.vid.job.command

import net.javacrumbs.jsonunit.JsonMatchers.jsonPartEquals
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.core.AllOf.allOf
import org.mockito.Answers
import org.mockito.InjectMocks
import org.mockito.Mock
import org.mockito.Mockito.mock
import org.onap.vid.job.JobAdapter
import org.onap.vid.job.JobsBrokerService
import org.onap.vid.job.command.ResourceCommandTest.FakeResourceCreator
import org.onap.vid.job.impl.JobSharedData
import org.onap.vid.model.Action
import org.onap.vid.model.serviceInstantiation.BaseResource.PauseInstantiation.afterCompletion
import org.onap.vid.model.serviceInstantiation.VfModule
import org.onap.vid.mso.RestMsoImplementation
import org.onap.vid.properties.Features
import org.onap.vid.services.AsyncInstantiationBusinessLogic
import org.onap.vid.testUtils.TestUtils
import org.onap.vid.testUtils.TestUtils.initMockitoMocks
import org.testng.AssertJUnit
import org.testng.annotations.BeforeMethod
import org.testng.annotations.DataProvider
import org.testng.annotations.Test
import org.togglz.core.manager.FeatureManager
import org.mockito.Mockito.`when` as _when

class VnfCommandTest {

    @Mock lateinit var asyncInstantiationBL: AsyncInstantiationBusinessLogic
    @Mock lateinit var restMso: RestMsoImplementation
    @Mock lateinit var msoRequestBuilder: MsoRequestBuilder
    @Mock lateinit var msoResultHandlerService: MsoResultHandlerService
    @Mock lateinit var inProgressStatusService:InProgressStatusService
    @Mock lateinit var watchChildrenJobsBL: WatchChildrenJobsBL
    @Mock lateinit var jobsBrokerService: JobsBrokerService
    @Mock lateinit var jobAdapter: JobAdapter
    @Mock lateinit var featureManager: FeatureManager

    @Mock lateinit var jobSharedData: JobSharedData
    @Mock(answer = Answers.RETURNS_MOCKS) lateinit var vnfJobRequest: org.onap.vid.model.serviceInstantiation.Vnf

    @InjectMocks lateinit var vnfCommand: VnfCommand;

    @BeforeMethod
    fun initMocks() {
        initMockitoMocks(this)
    }

    @Test(dataProvider = "trueAndFalse", dataProviderClass = TestUtils::class)
    fun `childVfModuleWithVnfRegionAndTenant -- given vfmodule -- tenant and region are copied from vnf`(featureToggleOn: Boolean) {
        runChildVfModuleWithVnfRegionAndTenant(featureToggleOn, Action.Create, featureToggleOn)
    }

    @DataProvider
    fun allPossibleActions(): Array<Array<out Any?>> {
        return Action.values().map { arrayOf(it) }.toTypedArray()
    }

    @Test(dataProvider = "allPossibleActions")
    fun `childVfModuleWithVnfRegionAndTenant -- given vfmodule in different actions -- only "action_Create" copies tenant and region from vnf`(vfModuleAction: Action) {
        runChildVfModuleWithVnfRegionAndTenant(true, vfModuleAction, vfModuleAction == Action.Create)
    }

    private fun runChildVfModuleWithVnfRegionAndTenant(featureToggleOn: Boolean, vfModuleAction: Action, isCopyVnfToVfmoduleExpected: Boolean) {

        val vfModule = FakeResourceCreator.createVfModule(vfModuleAction)
                        .cloneWith("vfmodule-lcp-cloud-region-id", "vfmodule-tenant-id")

        _when(featureManager.isActive(Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF)).thenReturn(featureToggleOn)

        _when(vnfJobRequest.lcpCloudRegionId).thenReturn("vnf-lcp-cloud-region-id")
        _when(vnfJobRequest.tenantId).thenReturn("vnf-tenant-id")
        _when(jobSharedData.request).thenReturn(vnfJobRequest)

        vnfCommand.init(jobSharedData, mapOf())

        val expectedSource = if (isCopyVnfToVfmoduleExpected) "vnf" else "vfmodule"

        assertThat(vnfCommand.childVfModuleWithVnfRegionAndTenant(vfModule),
                allOf(
                        jsonPartEquals("lcpCloudRegionId", "${expectedSource}-lcp-cloud-region-id"),
                        jsonPartEquals("tenantId", "${expectedSource}-tenant-id")
                )
        )
    }

    @DataProvider
    fun shoudlPause(): Array<Array<out Any?>> {
        return arrayOf(
                arrayOf("action create, pause in module and flag active", Action.Create, true, true, true),
                arrayOf("action create, pause in module and flag  not active", Action.Create, true, false, false),
                arrayOf("action not create, pause in module and flag active", Action.None, true, true, false),
                arrayOf("action create, no pause in module and flag active", Action.Create, false, true, false),
                arrayOf("action create, no pause in module and flag not active", Action.Create, false, false, false))
    }

    @Test(dataProvider = "shoudlPause")
    fun `shouldPauseAfterInstantiation -- given different flag and pause conditions`(desc: String, vfModuleAction: Action, isPause: Boolean, flag: Boolean,
                                                                                     expectedResult: Boolean) {
        val vfModule = mock(VfModule::class.java);

        _when(featureManager.isActive(Features.FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION)).thenReturn(flag)
        _when(vfModule.action).thenReturn(vfModuleAction)

        if (isPause) {
            _when(vfModule.pauseInstantiation).thenReturn(afterCompletion)
        }

        AssertJUnit.assertEquals(desc, expectedResult, vnfCommand.shoudlPauseAfterInstantiation(vfModule))
    }
}