Skip to content

Commit

Permalink
fix NPE when no permission to do listAvailablePrivateIPAddresses in…
Browse files Browse the repository at this point in the history
… `Subnet` (Azure#33754)

* fix NPE when no permission

* changelog.md
  • Loading branch information
XiaofeiCao authored Feb 27, 2023
1 parent d81baf9 commit 2c20976
Show file tree
Hide file tree
Showing 4 changed files with 279 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,9 @@

## 2.25.0-beta.1 (Unreleased)

### Features Added

### Breaking Changes

### Bugs Fixed

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

## 2.24.0 (2023-02-17)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ public Set<String> listAvailablePrivateIPAddresses() {
.serviceClient()
.getVirtualNetworks()
.checkIpAddressAvailability(this.parent().resourceGroupName(), this.parent().name(), takenIPAddress);
if (result == null) {
if (result == null || result.availableIpAddresses() == null) {
return ipAddresses;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,36 @@

package com.azure.resourcemanager.network;

import com.azure.core.management.Region;
import com.azure.resourcemanager.network.models.ApplicationSecurityGroup;
import com.azure.resourcemanager.network.models.Network;
import com.azure.resourcemanager.network.models.NetworkInterface;
import com.azure.resourcemanager.network.models.NetworkInterfaces;
import com.azure.resourcemanager.network.models.Networks;
import com.azure.resourcemanager.network.models.NicIpConfiguration;
import com.azure.resourcemanager.network.models.Subnet;
import com.azure.resourcemanager.resources.fluentcore.arm.ResourceUtils;
import com.azure.resourcemanager.resources.models.ResourceGroup;
import com.azure.resourcemanager.resources.models.ResourceGroups;
import com.azure.core.management.Region;
import com.azure.resourcemanager.resources.fluentcore.model.Creatable;
import com.azure.resourcemanager.resources.fluentcore.model.CreatedResources;
import com.azure.resourcemanager.resources.models.ResourceGroup;
import com.azure.resourcemanager.resources.models.ResourceGroups;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class NetworkInterfaceOperationsTests extends NetworkManagementTest {

@Test
Expand Down Expand Up @@ -424,4 +426,38 @@ public void canDeleteNetworkWithServiceCallBack() {
}
Assertions.assertEquals(counter.intValue(), 1);
}

@Test
public void canListSubnetAvailableIpAddresses() {
String networkName = generateRandomResourceName("vnet", 10);
String subnetName = "subnet1";
String nicName = generateRandomResourceName("nic", 10);

Network network = networkManager.networks()
.define(networkName)
.withRegion(Region.US_EAST)
.withNewResourceGroup(rgName)
.withAddressSpace("10.0.0.0/24")
.withSubnet(subnetName, "10.0.0.0/29")
.create();

Subnet subnet = network.subnets().get(subnetName);
Set<String> availableIps = subnet.listAvailablePrivateIPAddresses();
Assertions.assertTrue(availableIps.size() > 0);

String availableIp = availableIps.iterator().next();

// occupy the available ip address
NetworkInterface nic = networkManager.networkInterfaces()
.define(nicName)
.withRegion(Region.US_EAST)
.withExistingResourceGroup(rgName)
.withExistingPrimaryNetwork(network)
.withSubnet(subnetName)
.withPrimaryPrivateIPAddressStatic(availableIp)
.create();

availableIps = subnet.listAvailablePrivateIPAddresses();
Assertions.assertFalse(availableIps.contains(availableIp));
}
}
Loading

0 comments on commit 2c20976

Please sign in to comment.