1+ /*
2+ * Copyright (c) Microsoft Corporation
3+ * <p/>
4+ * All rights reserved.
5+ * <p/>
6+ * MIT License
7+ * <p/>
8+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
9+ * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
10+ * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
11+ * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
12+ * <p/>
13+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
14+ * the Software.
15+ * <p/>
16+ * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
17+ * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+ * SOFTWARE.
21+ */
22+
23+ package com.microsoft.azure.hdinsight.common
24+
25+ import com.microsoft.azure.hdinsight.sdk.cluster.ClusterDetail
26+ import com.microsoft.azure.hdinsight.sdk.cluster.EmulatorClusterDetail
27+ import com.microsoft.azure.hdinsight.sdk.cluster.HDInsightAdditionalClusterDetail
28+ import com.microsoft.azuretools.authmanage.SubscriptionManager
29+ import com.microsoft.azuretools.authmanage.models.SubscriptionDetail
30+ import com.microsoft.azuretools.sdkmanage.AzureManager
31+ import cucumber.api.DataTable
32+ import cucumber.api.java.Before
33+ import cucumber.api.java.en.Given
34+ import org.assertj.core.api.Assertions.assertThat
35+ import org.mockito.Mockito
36+ import org.mockito.Mockito.*
37+ import java.util.*
38+
39+ class ClusterManagerExScenario {
40+ data class SimpleCluster (val name : String ,
41+ val storageAccount : String ,
42+ val storageKey : String ,
43+ val username : String ,
44+ val password : String ,
45+ val subscription : String )
46+
47+ data class SimpleSubscription (val name : String ,
48+ val isSelected : Boolean )
49+
50+ private var clusterMagr: ClusterManagerEx ? = null
51+ private var additionalClusters: List <HDInsightAdditionalClusterDetail > = ArrayList ()
52+ private var emulatedClusters: List <EmulatorClusterDetail > = ArrayList ()
53+ private var subscriptionClusters: List <ClusterDetail > = ArrayList ()
54+ private var subscriptions = mapOf<String , SubscriptionDetail >()
55+
56+ @Before
57+ fun setUp () {
58+ clusterMagr = mock(ClusterManagerEx ::class .java, CALLS_REAL_METHODS )
59+ }
60+
61+ @Given(" ^Linked HDInsight clusters are:$" )
62+ fun initLinkedClusters (clusterDetails : DataTable ) {
63+ additionalClusters = clusterDetails.asList(SimpleCluster ::class .java)
64+ .map {
65+ val clusterMock = mock(HDInsightAdditionalClusterDetail ::class .java, CALLS_REAL_METHODS )
66+ doReturn(it.name).`when `(clusterMock).name
67+ doReturn(it.username).`when `(clusterMock).httpUserName
68+ doReturn(it.password).`when `(clusterMock).httpPassword
69+
70+ clusterMock
71+ }
72+
73+ doReturn(additionalClusters).`when `(clusterMagr!! ).additionalClusters
74+ }
75+
76+ @Given(" ^emulated HDInsight clusters are:$" )
77+ fun initEmulatedLinkedClusters (clusterDetails : DataTable ) {
78+ emulatedClusters = clusterDetails.asList(SimpleCluster ::class .java)
79+ .map {
80+ val clusterMock = mock(EmulatorClusterDetail ::class .java, CALLS_REAL_METHODS )
81+ doReturn(it.name).`when `(clusterMock).name
82+ doReturn(it.username).`when `(clusterMock).httpUserName
83+ doReturn(it.password).`when `(clusterMock).httpPassword
84+
85+ clusterMock
86+ }
87+
88+ doReturn(emulatedClusters).`when `(clusterMagr!! ).emulatorClusters
89+ }
90+
91+
92+ @Given(" ^in subscription HDInsight clusters are:$" )
93+ fun initSubscriptionClusters (clusterDetails : DataTable ) {
94+ // create AzureManager mock instance
95+ val azureMgrMock = mock(AzureManager ::class .java)
96+ doReturn(azureMgrMock).`when `(clusterMagr!! ).azureManager
97+
98+ // create SubscriptionManager mock instance
99+ val subscriptionManagerMock = mock(SubscriptionManager ::class .java)
100+ Mockito .`when `(azureMgrMock.subscriptionManager).thenReturn(subscriptionManagerMock)
101+
102+ Mockito .`when `(subscriptionManagerMock.subscriptionDetails).thenReturn(subscriptions.values.toList())
103+
104+ subscriptionClusters = clusterDetails.asList(SimpleCluster ::class .java)
105+ .map {
106+ val clusterMock = mock(ClusterDetail ::class .java, CALLS_REAL_METHODS )
107+ doReturn(it.name).`when `(clusterMock).name
108+ doReturn(it.username).`when `(clusterMock).httpUserName
109+ doReturn(it.password).`when `(clusterMock).httpPassword
110+ // FIXME: Hardcoded for spark version
111+ doReturn(" 2.2" ).`when `(clusterMock).sparkVersion
112+ doReturn(subscriptions[it.subscription]).`when `(clusterMock).subscription
113+
114+ clusterMock
115+ }
116+
117+ doReturn(Optional .of(subscriptionClusters)).`when `(clusterMagr!! )
118+ .getSubscriptionHDInsightClustersOfType(subscriptions.values.toList())
119+ }
120+
121+ @Given(" ^subscriptions mocked are:$" )
122+ fun mockSubscriptions (subscriptionsMock : DataTable ) {
123+ subscriptions = subscriptionsMock.asList(SimpleSubscription ::class .java)
124+ .map {
125+ val subMock = mock(SubscriptionDetail ::class .java)
126+ Mockito .`when `(subMock.subscriptionName).thenReturn(it.name)
127+ Mockito .`when `(subMock.isSelected).thenReturn(it.isSelected)
128+
129+ it.name to subMock
130+ }
131+ .toMap()
132+
133+ }
134+
135+ @Given(" ^check get all Cluster details should be:$" )
136+ fun checkGetClusterDetails (clusterDetailsExpect : List <String >) {
137+ assertThat(clusterMagr!! .clusterDetails).extracting(" title" )
138+ .containsAll(clusterDetailsExpect)
139+ }
140+ }
0 commit comments