Skip to content

Commit 2c20976

Browse files
authored
fix NPE when no permission to do listAvailablePrivateIPAddresses in Subnet (Azure#33754)
* fix NPE when no permission * changelog.md
1 parent d81baf9 commit 2c20976

File tree

4 files changed

+279
-15
lines changed

4 files changed

+279
-15
lines changed

sdk/resourcemanager/azure-resourcemanager-network/CHANGELOG.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22

33
## 2.25.0-beta.1 (Unreleased)
44

5-
### Features Added
6-
7-
### Breaking Changes
8-
95
### Bugs Fixed
106

11-
### Other Changes
7+
- Fixed a bug that `listAvailablePrivateIPAddresses` in `Subnet` throws NPE when user has no permission.
128

139
## 2.24.0 (2023-02-17)
1410

sdk/resourcemanager/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/SubnetImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ public Set<String> listAvailablePrivateIPAddresses() {
268268
.serviceClient()
269269
.getVirtualNetworks()
270270
.checkIpAddressAvailability(this.parent().resourceGroupName(), this.parent().name(), takenIPAddress);
271-
if (result == null) {
271+
if (result == null || result.availableIpAddresses() == null) {
272272
return ipAddresses;
273273
}
274274

sdk/resourcemanager/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkInterfaceOperationsTests.java

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,36 @@
33

44
package com.azure.resourcemanager.network;
55

6+
import com.azure.core.management.Region;
67
import com.azure.resourcemanager.network.models.ApplicationSecurityGroup;
78
import com.azure.resourcemanager.network.models.Network;
89
import com.azure.resourcemanager.network.models.NetworkInterface;
910
import com.azure.resourcemanager.network.models.NetworkInterfaces;
1011
import com.azure.resourcemanager.network.models.Networks;
1112
import com.azure.resourcemanager.network.models.NicIpConfiguration;
13+
import com.azure.resourcemanager.network.models.Subnet;
1214
import com.azure.resourcemanager.resources.fluentcore.arm.ResourceUtils;
13-
import com.azure.resourcemanager.resources.models.ResourceGroup;
14-
import com.azure.resourcemanager.resources.models.ResourceGroups;
15-
import com.azure.core.management.Region;
1615
import com.azure.resourcemanager.resources.fluentcore.model.Creatable;
1716
import com.azure.resourcemanager.resources.fluentcore.model.CreatedResources;
17+
import com.azure.resourcemanager.resources.models.ResourceGroup;
18+
import com.azure.resourcemanager.resources.models.ResourceGroups;
19+
import org.junit.jupiter.api.Assertions;
20+
import org.junit.jupiter.api.Disabled;
21+
import org.junit.jupiter.api.Test;
22+
import reactor.core.publisher.Flux;
23+
import reactor.core.publisher.Mono;
24+
1825
import java.util.Arrays;
1926
import java.util.Collection;
2027
import java.util.HashMap;
2128
import java.util.HashSet;
2229
import java.util.LinkedHashMap;
2330
import java.util.List;
31+
import java.util.Set;
2432
import java.util.concurrent.CountDownLatch;
2533
import java.util.concurrent.atomic.AtomicInteger;
2634
import java.util.stream.Collectors;
2735

28-
import org.junit.jupiter.api.Assertions;
29-
import org.junit.jupiter.api.Disabled;
30-
import org.junit.jupiter.api.Test;
31-
import reactor.core.publisher.Flux;
32-
import reactor.core.publisher.Mono;
33-
3436
public class NetworkInterfaceOperationsTests extends NetworkManagementTest {
3537

3638
@Test
@@ -424,4 +426,38 @@ public void canDeleteNetworkWithServiceCallBack() {
424426
}
425427
Assertions.assertEquals(counter.intValue(), 1);
426428
}
429+
430+
@Test
431+
public void canListSubnetAvailableIpAddresses() {
432+
String networkName = generateRandomResourceName("vnet", 10);
433+
String subnetName = "subnet1";
434+
String nicName = generateRandomResourceName("nic", 10);
435+
436+
Network network = networkManager.networks()
437+
.define(networkName)
438+
.withRegion(Region.US_EAST)
439+
.withNewResourceGroup(rgName)
440+
.withAddressSpace("10.0.0.0/24")
441+
.withSubnet(subnetName, "10.0.0.0/29")
442+
.create();
443+
444+
Subnet subnet = network.subnets().get(subnetName);
445+
Set<String> availableIps = subnet.listAvailablePrivateIPAddresses();
446+
Assertions.assertTrue(availableIps.size() > 0);
447+
448+
String availableIp = availableIps.iterator().next();
449+
450+
// occupy the available ip address
451+
NetworkInterface nic = networkManager.networkInterfaces()
452+
.define(nicName)
453+
.withRegion(Region.US_EAST)
454+
.withExistingResourceGroup(rgName)
455+
.withExistingPrimaryNetwork(network)
456+
.withSubnet(subnetName)
457+
.withPrimaryPrivateIPAddressStatic(availableIp)
458+
.create();
459+
460+
availableIps = subnet.listAvailablePrivateIPAddresses();
461+
Assertions.assertFalse(availableIps.contains(availableIp));
462+
}
427463
}

0 commit comments

Comments
 (0)