Skip to content

Commit 6627203

Browse files
committed
add tests
add tests test test
1 parent e042d08 commit 6627203

File tree

3 files changed

+389
-27
lines changed

3 files changed

+389
-27
lines changed

sdk/resourcemanager/azure-resourcemanager-compute/src/test/java/com/azure/resourcemanager/compute/VirtualMachineOperationsTests.java

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import com.azure.core.http.HttpMethod;
77
import com.azure.core.http.HttpPipeline;
88
import com.azure.core.http.HttpPipelineBuilder;
9+
import com.azure.core.http.HttpPipelineCallContext;
10+
import com.azure.core.http.HttpPipelineNextPolicy;
11+
import com.azure.core.http.HttpPipelinePosition;
12+
import com.azure.core.http.HttpResponse;
913
import com.azure.core.http.policy.HttpPipelinePolicy;
1014
import com.azure.core.http.rest.PagedIterable;
1115
import com.azure.core.http.rest.PagedResponse;
@@ -83,6 +87,7 @@
8387
import org.junit.jupiter.api.Assertions;
8488
import org.junit.jupiter.api.Disabled;
8589
import org.junit.jupiter.api.Test;
90+
import reactor.core.publisher.Mono;
8691

8792
import java.time.Duration;
8893
import java.util.ArrayList;
@@ -2319,45 +2324,61 @@ public void canBeginCreateAndDeleteWithContext() {
23192324
final String publicIpDnsLabel = generateRandomResourceName("pip", 20);
23202325
final AtomicInteger createCounter = new AtomicInteger(0);
23212326
final AtomicInteger deleteCounter = new AtomicInteger(0);
2322-
HttpPipelinePolicy verificationPolicy = (context, next) -> {
2323-
if (context.getHttpRequest().getHttpMethod() == HttpMethod.PUT) {
2324-
// verify that all co-related resource creation requests will have the Context information
2325-
Object correlationData = context.getContext().getData(correlationKey).get();
2326-
Assertions.assertEquals(correlationId, correlationData);
2327-
createCounter.incrementAndGet();
2328-
} else if (context.getHttpRequest().getHttpMethod() == HttpMethod.DELETE) {
2329-
// verify that all co-related resource deletion requests will have the Context information
2330-
Object correlationData = context.getContext().getData(correlationKey).get();
2331-
Assertions.assertEquals(correlationId, correlationData);
2332-
deleteCounter.incrementAndGet();
2327+
final AtomicInteger getCounter = new AtomicInteger();
2328+
HttpPipelinePolicy verificationPolicy = new HttpPipelinePolicy() {
2329+
@Override
2330+
public HttpPipelinePosition getPipelinePosition() {
2331+
return HttpPipelinePosition.PER_CALL;
2332+
}
2333+
2334+
@Override
2335+
public Mono<HttpResponse> process(HttpPipelineCallContext context, HttpPipelineNextPolicy next) {
2336+
2337+
if (context.getHttpRequest().getHttpMethod() == HttpMethod.PUT) {
2338+
// verify that all co-related resource creation requests will have the Context information
2339+
Object correlationData = context.getContext().getData(correlationKey).get();
2340+
Assertions.assertEquals(correlationId, correlationData);
2341+
createCounter.incrementAndGet();
2342+
} else if (context.getHttpRequest().getHttpMethod() == HttpMethod.DELETE) {
2343+
// verify that all co-related resource deletion requests will have the Context information
2344+
Object correlationData = context.getContext().getData(correlationKey).get();
2345+
Assertions.assertEquals(correlationId, correlationData);
2346+
deleteCounter.incrementAndGet();
2347+
} else if (context.getHttpRequest().getHttpMethod() == HttpMethod.GET) {
2348+
// some GET requests are nested inside implementations, thus only verify methods we are interested in
2349+
context.getData(correlationKey).ifPresent(data -> {
2350+
Assertions.assertEquals(correlationId, data);
2351+
getCounter.incrementAndGet();
2352+
});
2353+
}
2354+
return next.process();
23332355
}
2334-
return next.process();
23352356
};
2336-
ComputeManager localComputeManager
2357+
ComputeManager computeManagerWithPolicy
23372358
= buildManager(ComputeManager.class, computeManager.httpPipeline(), verificationPolicy);
23382359
Context context = new Context(correlationKey, correlationId);
23392360

2340-
Disk disk = localComputeManager.disks()
2361+
Disk disk = computeManagerWithPolicy.disks()
23412362
.define(diskName)
23422363
.withRegion(region)
2343-
.withNewResourceGroup(rgName)
2364+
.withNewResourceGroup(rgName2)
23442365
.withData()
23452366
.withSizeInGB(1)
23462367
.beginCreate(context)
23472368
.getFinalResult();
23482369

2349-
Snapshot snapshot = localComputeManager.snapshots()
2370+
Snapshot snapshot = computeManagerWithPolicy.snapshots()
23502371
.define(snapshotName)
23512372
.withRegion(region)
2352-
.withExistingResourceGroup(rgName)
2373+
.withExistingResourceGroup(rgName2)
23532374
.withDataFromDisk(disk)
23542375
.beginCreate(context)
23552376
.getFinalResult();
23562377

2357-
Accepted<VirtualMachine> accepted = localComputeManager.virtualMachines()
2378+
Accepted<VirtualMachine> accepted = computeManagerWithPolicy.virtualMachines()
23582379
.define(vmName)
23592380
.withRegion(region)
2360-
.withExistingResourceGroup(rgName)
2381+
.withExistingResourceGroup(rgName2)
23612382
.withNewPrimaryNetwork("10.0.0.0/28")
23622383
.withPrimaryPrivateIPAddressDynamic()
23632384
.withNewPrimaryPublicIPAddress(publicIpDnsLabel)
@@ -2370,18 +2391,22 @@ public void canBeginCreateAndDeleteWithContext() {
23702391
.withPrimaryNetworkInterfaceDeleteOptions(DeleteOptions.DETACH)
23712392
.beginCreate(context);
23722393
VirtualMachine vm = accepted.getFinalResult();
2373-
String nicId = vm.getPrimaryNetworkInterface().id();
2394+
2395+
int getCountWithContext = getCounter.get();
2396+
String nicId = vm.getPrimaryNetworkInterface(context).id();
2397+
Assertions.assertEquals(1, getCounter.get() - getCountWithContext);
23742398

23752399
// resourceGroup + disk + snapshot + network + neworkInterface + publicIp + VM = 7
23762400
Assertions.assertEquals(7, createCounter.get());
23772401

2378-
localComputeManager.virtualMachines().beginDeleteById(vm.id(), false, context).getFinalResult();
2379-
localComputeManager.networkManager().networkInterfaces().beginDeleteById(nicId, context);
2380-
localComputeManager.snapshots().beginDeleteById(snapshot.id(), context).getFinalResult();
2381-
localComputeManager.disks().beginDeleteById(disk.id(), context).getFinalResult();
2402+
computeManagerWithPolicy.virtualMachines().beginDeleteById(vm.id(), false, context).getFinalResult();
2403+
computeManagerWithPolicy.networkManager().networkInterfaces().beginDeleteById(nicId, context);
2404+
computeManagerWithPolicy.snapshots().beginDeleteById(snapshot.id(), context).getFinalResult();
2405+
computeManagerWithPolicy.disks().beginDeleteById(disk.id(), context).getFinalResult();
2406+
computeManagerWithPolicy.resourceManager().resourceGroups().beginDeleteByName(rgName2, context);
23822407

2383-
// vm + nic + snapshot + disk = 4
2384-
Assertions.assertEquals(4, deleteCounter.get());
2408+
// vm + nic + snapshot + disk + resourcegroup = 5
2409+
Assertions.assertEquals(5, deleteCounter.get());
23852410
}
23862411

23872412
// *********************************** helper methods ***********************************
@@ -2391,7 +2416,7 @@ private <T> T buildManager(Class<T> managerClazz, HttpPipeline httpPipeline, Htt
23912416
pipelinePolicies.add(httpPipeline.getPolicy(i));
23922417
}
23932418

2394-
pipelinePolicies.add(policy);
2419+
pipelinePolicies.add(0, policy);
23952420

23962421
HttpPipeline newPipeline = new HttpPipelineBuilder().httpClient(httpPipeline.getHttpClient())
23972422
.policies(pipelinePolicies.toArray(new HttpPipelinePolicy[0]))
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.resourcemanager;
5+
6+
import com.azure.core.credential.TokenCredential;
7+
import com.azure.core.http.HttpClient;
8+
import com.azure.core.http.HttpMethod;
9+
import com.azure.core.http.HttpPipeline;
10+
import com.azure.core.http.HttpPipelineCallContext;
11+
import com.azure.core.http.HttpPipelineNextPolicy;
12+
import com.azure.core.http.HttpPipelinePosition;
13+
import com.azure.core.http.HttpResponse;
14+
import com.azure.core.http.policy.HttpLogOptions;
15+
import com.azure.core.http.policy.HttpPipelinePolicy;
16+
import com.azure.core.http.policy.RetryPolicy;
17+
import com.azure.core.management.Region;
18+
import com.azure.core.management.profile.AzureProfile;
19+
import com.azure.core.util.Context;
20+
import com.azure.resourcemanager.network.models.ApplicationSecurityGroup;
21+
import com.azure.resourcemanager.network.models.NetworkInterface;
22+
import com.azure.resourcemanager.resources.fluentcore.utils.HttpPipelineProvider;
23+
import com.azure.resourcemanager.resources.fluentcore.utils.ResourceManagerUtils;
24+
import com.azure.resourcemanager.resources.models.Deployment;
25+
import com.azure.resourcemanager.resources.models.DeploymentMode;
26+
import com.azure.resourcemanager.test.ResourceManagerTestProxyTestBase;
27+
import com.azure.resourcemanager.test.utils.TestDelayProvider;
28+
import com.azure.resourcemanager.test.utils.TestIdentifierProvider;
29+
import org.junit.jupiter.api.Assertions;
30+
import org.junit.jupiter.api.Test;
31+
import reactor.core.publisher.Mono;
32+
33+
import java.io.BufferedReader;
34+
import java.io.IOException;
35+
import java.io.InputStream;
36+
import java.io.InputStreamReader;
37+
import java.nio.charset.StandardCharsets;
38+
import java.time.temporal.ChronoUnit;
39+
import java.util.HashMap;
40+
import java.util.List;
41+
import java.util.Map;
42+
import java.util.UUID;
43+
import java.util.concurrent.atomic.AtomicInteger;
44+
import java.util.stream.Collectors;
45+
46+
public class MethodsWithContextTests extends ResourceManagerTestProxyTestBase {
47+
48+
private String rgName;
49+
private final Region region = Region.US_WEST2;
50+
private AzureResourceManager azureResourceManager;
51+
52+
final AtomicInteger createCounter = new AtomicInteger(0);
53+
final AtomicInteger deleteCounter = new AtomicInteger(0);
54+
final AtomicInteger getCounter = new AtomicInteger();
55+
final String correlationId = UUID.randomUUID().toString();
56+
final String correlationKey = "x-ms-correlation-id";
57+
final Context context = new Context(correlationKey, correlationId);
58+
59+
@Test
60+
public void canGetWithContext() throws IOException {
61+
String deploymentName = generateRandomResourceName("dp", 15);
62+
String templateJson;
63+
try (InputStream templateStream = this.getClass().getResourceAsStream("/deploymentTemplate.json")) {
64+
templateJson = new BufferedReader(new InputStreamReader(templateStream, StandardCharsets.UTF_8)).lines()
65+
.collect(Collectors.joining("\n"));
66+
}
67+
Map<String, Object> parametersMap = new HashMap<>();
68+
String nicName = generateRandomResourceName("nic", 15);
69+
String networkName = generateRandomResourceName("vnet", 15);
70+
String nsgName = generateRandomResourceName("nsg", 15);
71+
String asgName = generateRandomResourceName("asg", 15);
72+
addParameters(parametersMap, "networkInterfaceName", nicName);
73+
addParameters(parametersMap, "virtualNetworkName", networkName);
74+
addParameters(parametersMap, "networkSecurityGroupName", nsgName);
75+
addParameters(parametersMap, "applicationSecurityGroupName", asgName);
76+
77+
Deployment deployment = azureResourceManager.deployments()
78+
.define(deploymentName)
79+
.withNewResourceGroup(rgName, region)
80+
.withTemplate(templateJson)
81+
.withParameters(parametersMap)
82+
.withMode(DeploymentMode.INCREMENTAL)
83+
.beginCreate(context)
84+
.getFinalResult();
85+
86+
int getCount = getCounter.get();
87+
azureResourceManager.applicationSecurityGroups().getByResourceGroup(rgName, asgName, context);
88+
NetworkInterface nic = azureResourceManager.networkInterfaces().listByResourceGroup(rgName, context).stream().findFirst().get();
89+
azureResourceManager.networkSecurityGroups().getByResourceGroup(rgName, nsgName, context);
90+
azureResourceManager.networks().getByResourceGroup(rgName, networkName, context);
91+
nic.primaryIPConfiguration().listAssociatedApplicationSecurityGroups(context).stream().count();
92+
93+
Assertions.assertEquals(5, getCounter.get() - getCount);
94+
95+
azureResourceManager.deployments().beginDeleteById(deployment.id(), context).getFinalResult();
96+
azureResourceManager.resourceGroups().beginDeleteByName(rgName, null, context);
97+
98+
// resource group + deployment = 2 creations
99+
Assertions.assertEquals(2, createCounter.get());
100+
// deployment + resource group = 2 deletions
101+
Assertions.assertEquals(2, deleteCounter.get());
102+
}
103+
104+
private void addParameters(Map<String, Object> parametersMap, String parameterName, Object parameterValue) {
105+
Map<String, Object> valueMap = new HashMap<>();
106+
valueMap.put("value", parameterValue);
107+
108+
parametersMap.put(parameterName, valueMap);
109+
}
110+
111+
@Override
112+
protected HttpPipeline buildHttpPipeline(TokenCredential credential, AzureProfile profile, HttpLogOptions httpLogOptions, List<HttpPipelinePolicy> policies, HttpClient httpClient) {
113+
rgName = generateRandomResourceName("javacsmrg", 15);
114+
VerificationPolicy verificationPolicy = new VerificationPolicy();
115+
policies.add(0, verificationPolicy);
116+
return HttpPipelineProvider.buildHttpPipeline(credential, profile, null, httpLogOptions, null,
117+
new RetryPolicy("Retry-After", ChronoUnit.SECONDS), policies, httpClient);
118+
}
119+
120+
@Override
121+
protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile) {
122+
123+
ResourceManagerUtils.InternalRuntimeContext.setDelayProvider(new TestDelayProvider(!isPlaybackMode()));
124+
ResourceManagerUtils.InternalRuntimeContext internalContext = new ResourceManagerUtils.InternalRuntimeContext();
125+
internalContext.setIdentifierFunction(name -> new TestIdentifierProvider(testResourceNamer));
126+
this.azureResourceManager = buildManager(AzureResourceManager.class, httpPipeline, profile);
127+
setInternalContext(internalContext, azureResourceManager);
128+
}
129+
130+
@Override
131+
protected void cleanUpResources() {
132+
}
133+
134+
private class VerificationPolicy implements HttpPipelinePolicy {
135+
@Override
136+
public HttpPipelinePosition getPipelinePosition() {
137+
return HttpPipelinePosition.PER_CALL;
138+
}
139+
140+
@Override
141+
public Mono<HttpResponse> process(HttpPipelineCallContext context, HttpPipelineNextPolicy next) {
142+
143+
if (context.getHttpRequest().getHttpMethod() == HttpMethod.PUT) {
144+
// verify that all co-related resource creation requests will have the Context information
145+
Object correlationData = context.getContext().getData(correlationKey).get();
146+
Assertions.assertEquals(correlationId, correlationData);
147+
createCounter.incrementAndGet();
148+
} else if (context.getHttpRequest().getHttpMethod() == HttpMethod.DELETE) {
149+
// verify that all co-related resource deletion requests will have the Context information
150+
Object correlationData = context.getContext().getData(correlationKey).get();
151+
Assertions.assertEquals(correlationId, correlationData);
152+
deleteCounter.incrementAndGet();
153+
} else if (context.getHttpRequest().getHttpMethod() == HttpMethod.GET) {
154+
// some GET requests are nested inside implementations, thus only verify methods we are interested in
155+
context.getData(correlationKey).ifPresent(data -> {
156+
Assertions.assertEquals(correlationId, data);
157+
getCounter.incrementAndGet();
158+
});
159+
}
160+
return next.process();
161+
}
162+
}
163+
}

0 commit comments

Comments
 (0)