diff --git a/eng/lintingconfigs/revapi/track2/revapi.json b/eng/lintingconfigs/revapi/track2/revapi.json index 21a536e141a9..1af31ed04ecb 100644 --- a/eng/lintingconfigs/revapi/track2/revapi.json +++ b/eng/lintingconfigs/revapi/track2/revapi.json @@ -748,6 +748,11 @@ "code": ".*", "old": ".*com.azure.resourcemanager.keyvault.models.Reason.*", "justification": "\"Reason\" enum has changed from sealed to expandable." + }, + { + "code" : "java.field.addedStaticField", + "new" : "field com.azure.resourcemanager.network.models.PublicIPSkuType.STANDARD_V2", + "justification" : "Not a break." } ] } diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 123e1cc04e44..2612c23b9081 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -285,7 +285,7 @@ com.azure.resourcemanager:azure-resourcemanager-eventhubs;2.53.4;2.54.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-keyvault;2.54.0;2.55.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-monitor;2.53.4;2.54.0-beta.2 com.azure.resourcemanager:azure-resourcemanager-msi;2.53.4;2.54.0-beta.1 -com.azure.resourcemanager:azure-resourcemanager-network;2.55.0;2.56.0-beta.1 +com.azure.resourcemanager:azure-resourcemanager-network;2.55.0;2.56.0 com.azure.resourcemanager:azure-resourcemanager-perf;1.0.0-beta.1;1.0.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-privatedns;2.53.4;2.54.0-beta.1 com.azure.resourcemanager:azure-resourcemanager-resources;2.53.4;2.54.0-beta.1 @@ -551,6 +551,7 @@ unreleased_com.azure.v2:azure-core;2.0.0-beta.1 unreleased_com.azure.v2:azure-identity;2.0.0-beta.1 unreleased_com.azure.v2:azure-data-appconfiguration;2.0.0-beta.1 unreleased_io.clientcore:http-netty4;1.0.0-beta.1 +unreleased_com.azure.resourcemanager:azure-resourcemanager-network;2.56.0 # Released Beta dependencies: Copy the entry from above, prepend "beta_", remove the current # version and set the version to the released beta. Released beta dependencies are only valid diff --git a/sdk/network/azure-resourcemanager-network/CHANGELOG.md b/sdk/network/azure-resourcemanager-network/CHANGELOG.md index 748720d59f29..e8279a02fdf7 100644 --- a/sdk/network/azure-resourcemanager-network/CHANGELOG.md +++ b/sdk/network/azure-resourcemanager-network/CHANGELOG.md @@ -1,14 +1,16 @@ # Release History -## 2.56.0-beta.1 (Unreleased) +## 2.56.0 (2025-11-12) ### Features Added -### Breaking Changes +- Added `STANDARD_V2` to `PublicIPSkuType`. ### Bugs Fixed -### Other Changes +- Fixed the bug that `list()` in `LocalNetworkGateways`, `VirtualNetworkGateways`, `VirtualNetworkGatewayConnections` only return resources from 1 resource group. +- Improved `VirtualNetworkGateway` to create Public IP Address with Standard SKU (unless the gateway is Basic SKU). +- Improved `PublicIpAddress` to set the public IP allocation method to Static (unless the Public IP Address is Basic SKU). ## 2.55.0 (2025-11-06) diff --git a/sdk/network/azure-resourcemanager-network/assets.json b/sdk/network/azure-resourcemanager-network/assets.json index 8acca9578f20..cf0c7d95dfed 100644 --- a/sdk/network/azure-resourcemanager-network/assets.json +++ b/sdk/network/azure-resourcemanager-network/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/network/azure-resourcemanager-network", - "Tag": "java/network/azure-resourcemanager-network_7d7f40f37b" + "Tag": "java/network/azure-resourcemanager-network_9360a60339" } diff --git a/sdk/network/azure-resourcemanager-network/pom.xml b/sdk/network/azure-resourcemanager-network/pom.xml index c5d863f8feb9..3f554ca8bade 100644 --- a/sdk/network/azure-resourcemanager-network/pom.xml +++ b/sdk/network/azure-resourcemanager-network/pom.xml @@ -14,7 +14,7 @@ com.azure.resourcemanager azure-resourcemanager-network - 2.56.0-beta.1 + 2.56.0 jar Microsoft Azure SDK for Network Management diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/LocalNetworkGatewaysImpl.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/LocalNetworkGatewaysImpl.java index 4fcdbb759bd2..f4d1321cb8a8 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/LocalNetworkGatewaysImpl.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/LocalNetworkGatewaysImpl.java @@ -35,7 +35,7 @@ public PagedIterable list() { @Override public PagedFlux listAsync() { - return PagedConverter + return PagedConverterForMergedPagedFlux .mapPage(PagedConverter.mergePagedFlux(this.manager().resourceManager().resourceGroups().listAsync(), rg -> inner().listByResourceGroupAsync(rg.name())), this::wrapModel); } diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PagedConverterForMergedPagedFlux.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PagedConverterForMergedPagedFlux.java new file mode 100644 index 000000000000..134b1c7c83a2 --- /dev/null +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PagedConverterForMergedPagedFlux.java @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.resourcemanager.network.implementation; + +import com.azure.core.http.rest.PagedFlux; +import com.azure.core.http.rest.PagedResponse; +import com.azure.core.http.rest.PagedResponseBase; +import com.azure.core.util.paging.PageRetriever; +import reactor.core.publisher.Flux; + +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +/** + * Utility class for conversion of PagedResponse. + */ +final class PagedConverterForMergedPagedFlux { + + private PagedConverterForMergedPagedFlux() { + } + + /** + * Applies map transform to elements of PagedFlux. + *

+ * Use this mapPage (not the one in PagedConverter) when the PagedFlux is produced by PagedConverter.mergePagedFlux. + * + * @param pagedFlux the input of PagedFlux. + * @param mapper the map transform of element T to element S. + * @param input type of PagedFlux. + * @param return type of PagedFlux. + * @return the PagedFlux with elements in PagedResponse transformed. + */ + static PagedFlux mapPage(PagedFlux pagedFlux, Function mapper) { + Supplier>> provider = () -> (continuationToken, pageSize) -> { + // take all the pages, do not use .take(1) + Flux> flux + = (continuationToken == null) ? pagedFlux.byPage() : pagedFlux.byPage(continuationToken); + return flux.map(mapPagedResponse(mapper)); + }; + return PagedFlux.create(provider); + } + + private static Function, PagedResponse> mapPagedResponse(Function mapper) { + return pagedResponse -> new PagedResponseBase(pagedResponse.getRequest(), + pagedResponse.getStatusCode(), pagedResponse.getHeaders(), + pagedResponse.getValue().stream().map(mapper).collect(Collectors.toList()), + pagedResponse.getContinuationToken(), null); + } +} diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PublicIpAddressImpl.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PublicIpAddressImpl.java index 92d0003287e2..26255e6708a3 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PublicIpAddressImpl.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PublicIpAddressImpl.java @@ -199,6 +199,7 @@ public Accepted beginCreate() { dependencyTasksAsync.blockLast(); this.cleanupDnsSettings(); + this.ensureStaticForStandardSku(); }, this::setInner, Context.NONE); } @@ -206,6 +207,7 @@ public Accepted beginCreate() { @Override public Mono createResourceAsync() { this.cleanupDnsSettings(); + this.ensureStaticForStandardSku(); return this.manager() .serviceClient() @@ -226,6 +228,14 @@ private void cleanupDnsSettings() { } } + private void ensureStaticForStandardSku() { + if (this.sku() != null + && this.sku() != PublicIPSkuType.BASIC + && this.innerModel().publicIpAllocationMethod() == null) { + this.withStaticIP(); + } + } + private boolean equalsResourceType(String resourceType) { IpConfigurationInner ipConfig = this.innerModel().ipConfiguration(); if (ipConfig == null || resourceType == null) { diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayConnectionsImpl.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayConnectionsImpl.java index 2f4ae8a73c45..95ab1f2910aa 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayConnectionsImpl.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayConnectionsImpl.java @@ -80,7 +80,7 @@ public VirtualNetworkGateway parent() { @Override public PagedFlux listAsync() { - return PagedConverter + return PagedConverterForMergedPagedFlux .mapPage(PagedConverter.mergePagedFlux(this.manager().resourceManager().resourceGroups().listAsync(), rg -> inner().listByResourceGroupAsync(rg.name())), this::wrapModel); } diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayImpl.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayImpl.java index 7e2ed33fbe17..63b653ca55fd 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayImpl.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayImpl.java @@ -8,6 +8,7 @@ import com.azure.resourcemanager.network.NetworkManager; import com.azure.resourcemanager.network.models.BgpSettings; import com.azure.resourcemanager.network.models.Network; +import com.azure.resourcemanager.network.models.PublicIPSkuType; import com.azure.resourcemanager.network.models.PublicIpAddress; import com.azure.resourcemanager.network.models.TagsObject; import com.azure.resourcemanager.network.models.VirtualNetworkGateway; @@ -140,11 +141,22 @@ public VirtualNetworkGatewayImpl withNewPublicIpAddress(Creatable ensureDefaultPipDefinition() { if (this.creatablePip == null) { - final String pipName = this.manager().resourceManager().internalContext().randomResourceName("pip", 9); - this.creatablePip = this.manager() - .publicIpAddresses() - .define(pipName) - .withRegion(this.regionName()) - .withExistingResourceGroup(this.resourceGroupName()); + this.withNewPublicIpAddress(); } return this.creatablePip; } diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewaysImpl.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewaysImpl.java index e504ecc08a0e..01848efaa657 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewaysImpl.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewaysImpl.java @@ -36,7 +36,7 @@ public PagedIterable list() { // TODO: Test this @Override public PagedFlux listAsync() { - return PagedConverter + return PagedConverterForMergedPagedFlux .mapPage(PagedConverter.mergePagedFlux(this.manager().resourceManager().resourceGroups().listAsync(), rg -> inner().listByResourceGroupAsync(rg.name())), this::wrapModel); } diff --git a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/PublicIPSkuType.java b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/PublicIPSkuType.java index 37cc465919bc..62cd62a3585e 100644 --- a/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/PublicIPSkuType.java +++ b/sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/models/PublicIPSkuType.java @@ -19,6 +19,9 @@ public final class PublicIPSkuType { /** Static value Standard for PublicIPSkuType. */ public static final PublicIPSkuType STANDARD = new PublicIPSkuType(PublicIpAddressSkuName.STANDARD); + /** Static value StandardV2 for PublicIPSkuType. */ + public static final PublicIPSkuType STANDARD_V2 = new PublicIPSkuType(PublicIpAddressSkuName.STANDARD_V2); + /** The actual serialized value for a PublicIPSkuType instance. */ private final PublicIpAddressSkuName skuName; diff --git a/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkManagementTest.java b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkManagementTest.java index aa426c75480b..edfcbec972b0 100644 --- a/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkManagementTest.java +++ b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/NetworkManagementTest.java @@ -9,6 +9,7 @@ import com.azure.core.http.policy.HttpLogOptions; import com.azure.core.http.policy.HttpPipelinePolicy; import com.azure.core.http.policy.RetryPolicy; +import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.keyvault.KeyVaultManager; import com.azure.resourcemanager.msi.MsiManager; import com.azure.core.management.profile.AzureProfile; @@ -51,6 +52,10 @@ protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile @Override protected void cleanUpResources() { - resourceManager.resourceGroups().beginDeleteByName(rgName); + try { + resourceManager.resourceGroups().beginDeleteByName(rgName); + } catch (ManagementException e) { + // ignore + } } } diff --git a/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/PublicIpAddressTests.java b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/PublicIpAddressTests.java new file mode 100644 index 000000000000..4d3a206ffe41 --- /dev/null +++ b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/PublicIpAddressTests.java @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.resourcemanager.network; + +import com.azure.core.management.Region; +import com.azure.core.management.exception.ManagementException; +import com.azure.resourcemanager.network.models.IpAllocationMethod; +import com.azure.resourcemanager.network.models.PublicIPSkuType; +import com.azure.resourcemanager.network.models.PublicIpAddress; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class PublicIpAddressTests extends NetworkTests { + + private static final Region REGION = Region.US_WEST3; + + @Test + public void testStandardSku() { + String pipName = generateRandomResourceName("pip", 10); + // STANDARD + PublicIpAddress pip = networkManager.publicIpAddresses() + .define(pipName) + .withRegion(REGION) + .withNewResourceGroup(rgName) + .withSku(PublicIPSkuType.STANDARD) + .create(); + Assertions.assertEquals(IpAllocationMethod.STATIC, pip.ipAllocationMethod()); + + networkManager.publicIpAddresses().deleteById(pip.id()); + + // STANDARD_V2 + pip = networkManager.publicIpAddresses() + .define(pipName) + .withRegion(REGION) + .withExistingResourceGroup(rgName) + .withSku(PublicIPSkuType.STANDARD_V2) + .create(); + Assertions.assertEquals(IpAllocationMethod.STATIC, pip.ipAllocationMethod()); + + networkManager.publicIpAddresses().deleteById(pip.id()); + + // If user explicitly sets "withDynamicIP", SDK will use it to create Public IP Address. + // In this case, service will return 400 StandardAndStandardV2SkuPublicIPAddressesMustBeStatic + Assertions.assertThrows(ManagementException.class, () -> { + PublicIpAddress pipToFail = networkManager.publicIpAddresses() + .define(pipName) + .withRegion(REGION) + .withNewResourceGroup(rgName) + .withDynamicIP() + .withSku(PublicIPSkuType.STANDARD) + .create(); + }); + } +} diff --git a/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/VirtualNetworkGatewayTests.java b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/VirtualNetworkGatewayTests.java new file mode 100644 index 000000000000..ce64b92a6442 --- /dev/null +++ b/sdk/network/azure-resourcemanager-network/src/test/java/com/azure/resourcemanager/network/VirtualNetworkGatewayTests.java @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.resourcemanager.network; + +import com.azure.core.management.Region; +import com.azure.core.management.exception.ManagementException; +import com.azure.resourcemanager.network.models.VirtualNetworkGateway; +import com.azure.resourcemanager.network.models.VirtualNetworkGatewaySkuName; +import com.azure.resourcemanager.resources.fluentcore.arm.models.HasName; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class VirtualNetworkGatewayTests extends NetworkTests { + + private static final Region REGION = Region.US_WEST3; + + @Test + public void testListBySubscription() { + String group1 = rgName; + String group2 = generateRandomResourceName("rg2", 15); + String gatewayName1 = generateRandomResourceName("vngw1", 15); + String gatewayName2 = generateRandomResourceName("vngw2", 15); + + try { + VirtualNetworkGateway gateway1 = createVirtualNetworkGateway(group1, gatewayName1); + VirtualNetworkGateway gateway2 = createVirtualNetworkGateway(group2, gatewayName2); + + List gatewayList + = networkManager.virtualNetworkGateways().list().stream().collect(Collectors.toList()); + Assertions.assertTrue(gatewayList.size() >= 2); + Set gatewayNames = gatewayList.stream().map(HasName::name).collect(Collectors.toSet()); + Assertions.assertTrue(gatewayNames.containsAll(Arrays.asList(gatewayName1, gatewayName2))); + } finally { + // group1 would be deleted in cleanUpResources + try { + resourceManager.resourceGroups().beginDeleteByName(group2); + } catch (ManagementException e) { + // ignore + } + } + } + + private VirtualNetworkGateway createVirtualNetworkGateway(String groupName, String name) { + return networkManager.virtualNetworkGateways() + .define(name) + .withRegion(REGION) + .withNewResourceGroup(groupName) + .withNewNetwork("10.0.0.0/25", "10.0.0.0/27") + .withRouteBasedVpn() + .withSku(VirtualNetworkGatewaySkuName.BASIC) + .create(); + } +} diff --git a/sdk/resourcemanager/azure-resourcemanager/CHANGELOG.md b/sdk/resourcemanager/azure-resourcemanager/CHANGELOG.md index 8282ee4762c9..cbf817b54da4 100644 --- a/sdk/resourcemanager/azure-resourcemanager/CHANGELOG.md +++ b/sdk/resourcemanager/azure-resourcemanager/CHANGELOG.md @@ -14,6 +14,16 @@ - Updated `api-version` to `2025-01-01`. +#### Features Added + +- Added `STANDARD_V2` to `PublicIPSkuType`. + +#### Bugs Fixed + +- Fixed the bug that `list()` in `LocalNetworkGateways`, `VirtualNetworkGateways`, `VirtualNetworkGatewayConnections` only return resources from 1 resource group. +- Improved `VirtualNetworkGateway` to create Public IP Address with Standard SKU (unless the gateway is Basic SKU). +- Improved `PublicIpAddress` to set the public IP allocation method to Static (unless the Public IP Address is Basic SKU). + ### azure-resourcemanager-containerservice #### Dependency Updates diff --git a/sdk/resourcemanager/azure-resourcemanager/assets.json b/sdk/resourcemanager/azure-resourcemanager/assets.json index b65edcc38f64..49b27c3a32a3 100644 --- a/sdk/resourcemanager/azure-resourcemanager/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager", - "Tag": "java/resourcemanager/azure-resourcemanager_4644dcbbc3" + "Tag": "java/resourcemanager/azure-resourcemanager_9fd99177f1" } diff --git a/sdk/resourcemanager/azure-resourcemanager/pom.xml b/sdk/resourcemanager/azure-resourcemanager/pom.xml index ea52f1c18f9f..36e397a213d6 100644 --- a/sdk/resourcemanager/azure-resourcemanager/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager/pom.xml @@ -107,7 +107,7 @@ com.azure.resourcemanager azure-resourcemanager-network - 2.55.0 + 2.56.0 com.azure.resourcemanager diff --git a/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestTemplate.java b/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestTemplate.java index c48a1b7866ac..b2068803bbb5 100644 --- a/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestTemplate.java +++ b/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestTemplate.java @@ -131,13 +131,11 @@ public void runTest(CollectionT collection, ResourceGroups resourceGroups) throw print(this.resource); boolean failedUpdate = false; - String message = "Update Failed"; // Verify update try { this.resource = updateResource(this.resource); Assertions.assertNotNull(this.resource); LOGGER.log(LogLevel.VERBOSE, () -> "\n------------\nUpdated resource:\n"); - message = "Print failed"; print(this.resource); } catch (Exception e) { LOGGER.log(LogLevel.VERBOSE, () -> "Update failed", e); @@ -147,13 +145,12 @@ public void runTest(CollectionT collection, ResourceGroups resourceGroups) throw // Verify deletion boolean failedDelete = false; try { - message = "Delete failed"; verifyDeleting(); } catch (Exception e) { LOGGER.log(LogLevel.VERBOSE, () -> "Delete failed", e); failedDelete = true; } - Assertions.assertFalse(failedUpdate, message); - Assertions.assertFalse(failedDelete, message); + Assertions.assertFalse(failedUpdate, "Update Failed"); + Assertions.assertFalse(failedDelete, "Delete failed"); } } diff --git a/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestVirtualNetworkGateway.java b/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestVirtualNetworkGateway.java index 40cd041a0bc0..259dba7738e8 100644 --- a/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestVirtualNetworkGateway.java +++ b/sdk/resourcemanager/azure-resourcemanager/src/test/java/com/azure/resourcemanager/TestVirtualNetworkGateway.java @@ -82,7 +82,7 @@ public VirtualNetworkGateway updateResource(VirtualNetworkGateway resource) thro .apply(); resource.refresh(); Assertions.assertTrue(resource.tags().containsKey("tag2")); - Assertions.assertTrue(!resource.tags().containsKey("tag1")); + Assertions.assertFalse(resource.tags().containsKey("tag1")); Map tagsMap = new HashMap<>(); tagsMap.put("tag3", "value3"); diff --git a/sdk/resources/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverter.java b/sdk/resources/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverter.java index c8792ea97f64..2906f3011c2b 100644 --- a/sdk/resources/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverter.java +++ b/sdk/resources/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverter.java @@ -43,6 +43,9 @@ public static PagedIterable mapPage(PagedIterable pageIterable, Fun /** * Applies map transform to elements of PagedFlux. + *

+ * Do not use it over PagedFlux generated from mergePagedFlux, as the continuationToken in that case cannot be used + * to continue the outer PagedFlux. * * @param pagedFlux the input of PagedFlux. * @param mapper the map transform of element T to element S. diff --git a/sdk/resources/azure-resourcemanager-resources/src/test/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverterTests.java b/sdk/resources/azure-resourcemanager-resources/src/test/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverterTests.java index ce460056f3a6..7d9417749a4e 100644 --- a/sdk/resources/azure-resourcemanager-resources/src/test/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverterTests.java +++ b/sdk/resources/azure-resourcemanager-resources/src/test/java/com/azure/resourcemanager/resources/fluentcore/utils/PagedConverterTests.java @@ -122,6 +122,18 @@ public void testMergePagedFlux() { Assertions.assertEquals(3 * 10, new PagedIterable<>(mergedPagedFlux).stream().count()); } + @Disabled("PagedConverter.mapPage should not be used with PagedConverter.mergePagedFlux (see PagedConverter documentation).") + @Test + public void testMergePagedFluxThenMapPage() { + PagedFlux pagedFlux = mockPagedFlux("base", 0, 3, 2); + PagedFlux mergedPagedFlux + = PagedConverter.mergePagedFlux(pagedFlux, item -> mockPagedFlux(item + "sub", 0, 10, 4)); + + PagedIterable iterable + = new PagedIterable<>(PagedConverter.mapPage(mergedPagedFlux, Function.identity())); + Assertions.assertEquals(3 * 10, iterable.stream().count()); + } + @Test public void testMergePagedFluxContainsEmptyPage() { PagedFlux pagedFlux = mockPagedFlux("base", 0, 3, 2); @@ -252,7 +264,7 @@ private static PagedFlux mockPagedFlux(String prefix, int startInclusive return pages.get(continuationToken); }; - return new PagedFlux<>(() -> Mono.just(nextPage.apply(prefix)), - continuationToken -> Mono.just(nextPage.apply(continuationToken))); + return new PagedFlux<>(() -> Mono.justOrEmpty(nextPage.apply(prefix)), + continuationToken -> Mono.justOrEmpty(nextPage.apply(continuationToken))); } }