public TestsFixture()
        {
            // place any initialization like environment settings here
#if DEBUG
            //Environment.SetEnvironmentVariable("AZURE_TEST_MODE", "Record");

            //Environment.SetEnvironmentVariable(
            //   "TEST_CSM_ORGID_AUTHENTICATION",
            //   "SubscriptionId=;Environment=Prod");
#endif
            TestUtilities.StartTest();
            try
            {
                UndoContext.Current.Start();

                var resourceManagementClient = ApiManagementHelper.GetResourceManagementClient();
                resourceManagementClient.TryRegisterSubscriptionForResource();
            }
            catch (Exception)
            {
                Cleanup();
                throw;
            }
            finally
            {
                TestUtilities.EndTest();
            }
        }
Exemple #2
0
        public void CheckServiceNameAvailability()
        {
            using (var context = UndoContext.Current)
            {
                context.Start("ResourceProviderFunctionalTests", "CheckServiceNameAvailability");

                var apiManagementClient = ApiManagementHelper.GetApiManagementClient();

                var validServiceName = TestUtilities.GenerateName("hydraapimservicevalid");
                var response         =
                    apiManagementClient.ApiManagement.CheckServiceNameAvailability(
                        new ApiServiceCheckNameAvailabilityParameters(validServiceName));
                Assert.NotNull(response);
                Assert.True(response.IsAvailable);
                Assert.Null(response.Reason);

                const string invalidName = "!!!invalidname";
                response =
                    apiManagementClient.ApiManagement.CheckServiceNameAvailability(
                        new ApiServiceCheckNameAvailabilityParameters(invalidName));
                Assert.NotNull(response);
                Assert.False(response.IsAvailable);
                Assert.NotNull(response.Reason);

                // create api management service
                var location      = this.ManagmentClient.TryGetLocation("West US");
                var resourceGroup = this.ResourceManagementClient.TryGetResourceGroup(location);
                if (string.IsNullOrWhiteSpace(resourceGroup))
                {
                    resourceGroup = TestUtilities.GenerateName("Api-Default");
                    this.ResourceManagementClient.TryRegisterResourceGroup(location, resourceGroup);
                }
                var createServiceParameters = new ApiServiceCreateOrUpdateParameters(
                    location,
                    new ApiServiceProperties
                {
                    CreatedAtUtc  = DateTime.UtcNow,
                    SkuProperties = new ApiServiceSkuProperties
                    {
                        Capacity = 1,
                        SkuType  = SkuType.Developer
                    },
                    AddresserEmail = "*****@*****.**",
                    PublisherEmail = "*****@*****.**",
                    PublisherName  = "publisher"
                });

                var createResponse = apiManagementClient.ApiManagement.CreateOrUpdate(resourceGroup, validServiceName,
                                                                                      createServiceParameters);
                Assert.NotNull(createResponse);

                response =
                    apiManagementClient.ApiManagement.CheckServiceNameAvailability(
                        new ApiServiceCheckNameAvailabilityParameters(validServiceName));
                Assert.NotNull(response);
                Assert.False(response.IsAvailable);
                Assert.NotNull(response.Reason);
            }
        }
        public TestsFixture()
        {
            TestUtilities.StartTest();
            try
            {
                UndoContext.Current.Start();

                var resourceManagementClient = ApiManagementHelper.GetResourceManagementClient();
                resourceManagementClient.TryRegisterSubscriptionForResource();
            }
            catch (Exception)
            {
                Cleanup();
                throw;
            }
            finally
            {
                TestUtilities.EndTest();
            }
        }
        public void ManageDeployments()
        {
            using (var context = UndoContext.Current)
            {
                context.Start("ResourceProviderFunctionalTests", "ManageDeployments");

                TryCreateApiService();

                var apiManagementClient = GetServiceClient <ApiManagementClient>(new CSMTestEnvironmentFactory());

                // update from Developer to Standard and Update Capacity from 1 to 2
                var response = apiManagementClient.ApiManagement.ManageDeployments(
                    ResourceGroupName,
                    ApiManagementServiceName,
                    new ApiServiceManageDeploymentsParameters
                {
                    SkuType      = SkuType.Standard,
                    Location     = Location,
                    SkuUnitCount = 2
                });

                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var getResponse = apiManagementClient.ApiManagement.Get(ResourceGroupName, ApiManagementServiceName);
                Assert.NotNull(getResponse);
                Assert.Equal(HttpStatusCode.OK, getResponse.StatusCode);
                Assert.NotNull(getResponse.Value);
                Assert.Equal(SkuType.Standard, getResponse.Value.Properties.SkuProperties.SkuType);
                Assert.Equal(2, getResponse.Value.Properties.SkuProperties.Capacity);

                // update from Standard to Premium and add one more region
                var location = this.ManagmentClient.GetLocations().FirstOrDefault(l => !string.Equals(l, Location, StringComparison.OrdinalIgnoreCase));
                if (location == null)
                {
                    location = "dummy location"; // in case environment has only one location.
                }

                // renew access token
                ApiManagementHelper.RefreshAccessToken(apiManagementClient);

                response = apiManagementClient.ApiManagement.ManageDeployments(
                    ResourceGroupName,
                    ApiManagementServiceName,
                    new ApiServiceManageDeploymentsParameters
                {
                    SkuType           = SkuType.Premium,
                    Location          = Location,
                    SkuUnitCount      = 2,
                    AdditionalRegions = new[]
                    {
                        new AdditionalRegion
                        {
                            Location     = location,
                            SkuType      = SkuType.Premium,
                            SkuUnitCount = 2
                        }
                    }
                });

                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                getResponse = apiManagementClient.ApiManagement.Get(ResourceGroupName, ApiManagementServiceName);
                Assert.NotNull(getResponse);
                Assert.Equal(HttpStatusCode.OK, getResponse.StatusCode);
                Assert.NotNull(getResponse.Value);
                Assert.Equal(SkuType.Premium, getResponse.Value.Properties.SkuProperties.SkuType);
                Assert.Equal(2, getResponse.Value.Properties.SkuProperties.Capacity);
                Assert.NotNull(getResponse.Value.Properties.AdditionalRegions);
                Assert.Equal(1, getResponse.Value.Properties.AdditionalRegions.Count);
                Assert.Equal(SkuType.Premium, getResponse.Value.Properties.AdditionalRegions[0].SkuType);
                Assert.Equal(2, getResponse.Value.Properties.AdditionalRegions[0].SkuUnitCount);
            }
        }
        public void BackupRestore()
        {
            using (var context = UndoContext.Current)
            {
                context.Start("ResourceProviderFunctionalTests", "BackupRestore");

                TryCreateApiService();

                // create storage account with blob container for the API Management backup
                var storageManagementClient = this.GetStorageManagementClient();

                var storageAccountName = TestUtilities.GenerateName("hydraapimstorage");
                Assert.True(
                    storageManagementClient.StorageAccounts.CheckNameAvailability(storageAccountName).IsAvailable,
                    "Could not generate unique storage account name");

                var storageCreateParams = new StorageAccountCreateParameters
                {
                    Name          = storageAccountName,
                    Location      = Location,
                    AffinityGroup = null,
                    Label         = "ApimHydraBackupRestoreTest",
                    Description   = "Api Management hydra client backup/restore test",
                    AccountType   = StorageAccountTypes.StandardGRS
                };
                storageManagementClient.StorageAccounts.Create(storageCreateParams);
                var storageKeysResponse = storageManagementClient.StorageAccounts.GetKeys(storageAccountName);

                const string apimBackupContainerName = "apimbackupcontainer";

                // create API Management backup
                var apiManagementClient = GetServiceClient <ApiManagementClient>(new CSMTestEnvironmentFactory());
                apiManagementClient.RefreshAccessToken();

                const string apimBackupName          = "apimbackup.zip";
                var          backupRestoreParameters = new ApiServiceBackupRestoreParameters
                {
                    StorageAccount = storageAccountName,
                    AccessKey      = storageKeysResponse.PrimaryKey,
                    ContainerName  = apimBackupContainerName,
                    BackupName     = apimBackupName
                };
                var response =
                    apiManagementClient.ApiManagement.Backup(
                        ResourceGroupName,
                        ApiManagementServiceName,
                        backupRestoreParameters);

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                // restore Api Management service from backup

                ApiManagementHelper.RefreshAccessToken(apiManagementClient);

                response =
                    apiManagementClient.ApiManagement.Restore(
                        ResourceGroupName,
                        ApiManagementServiceName,
                        backupRestoreParameters);

                Assert.NotNull(response);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var getResponse = apiManagementClient.ApiManagement.Get(ResourceGroupName, ApiManagementServiceName);
                Assert.NotNull(getResponse);
                Assert.Equal(HttpStatusCode.OK, getResponse.StatusCode);
                Assert.NotNull(getResponse.Value);
                Assert.Equal("Succeeded", getResponse.Value.Properties.ProvisioningState);
            }
        }
Exemple #6
0
        public void CreateListUpdateDelete()
        {
            using (var context = UndoContext.Current)
            {
                context.Start("ResourceProviderFunctionalTests", "CreateListUpdateDelete");

                TryCreateApiService();

                this.ApiManagementClient.RefreshAccessToken();

                // get different resource group name.
                var resourceGroupName =
                    this.ResourceManagementClient.GetResourceGroups()
                    .Where(group => !group.Name.Equals(ResourceGroupName))
                    .Select(group => group.Name)
                    .FirstOrDefault();

                if (resourceGroupName == null)
                {
                    resourceGroupName = TestUtilities.GenerateName("hydraapimresourcegroup");
                }

                // create one more Api Management service (one is already created)
                var serviceName             = TestUtilities.GenerateName("hydraapimservice2");
                var createServiceParameters = new ApiServiceCreateOrUpdateParameters(
                    Location,
                    new ApiServiceProperties
                {
                    CreatedAtUtc   = DateTime.UtcNow,
                    AddresserEmail = "*****@*****.**",
                    PublisherEmail = "*****@*****.**",
                    PublisherName  = "publisher"
                },
                    new ApiServiceSkuProperties
                {
                    Capacity = 1,
                    SkuType  = SkuType.Developer
                });
                var createResponse = this.ApiManagementClient.ResourceProvider.CreateOrUpdate(resourceGroupName, serviceName, createServiceParameters);
                Assert.NotNull(createResponse);
                Assert.Equal(HttpStatusCode.OK, createResponse.StatusCode);

                var getResponse = this.ApiManagementClient.ResourceProvider.Get(resourceGroupName, serviceName);
                Assert.NotNull(getResponse);
                Assert.Equal(HttpStatusCode.OK, getResponse.StatusCode);
                Assert.NotNull(getResponse.Value);
                Assert.Equal("Succeeded", getResponse.Value.Properties.ProvisioningState, StringComparer.CurrentCultureIgnoreCase);
                Assert.Equal(createServiceParameters.SkuProperties.Capacity, getResponse.Value.SkuProperties.Capacity);
                Assert.Equal(createServiceParameters.SkuProperties.SkuType, getResponse.Value.SkuProperties.SkuType);
                Assert.Equal(createServiceParameters.Properties.AddresserEmail, getResponse.Value.Properties.AddresserEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherEmail, getResponse.Value.Properties.PublisherEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherName, getResponse.Value.Properties.PublisherName);
                Assert.Equal(VirtualNetworkType.None, getResponse.Value.Properties.VpnType);
                Assert.Equal(0, getResponse.Value.Tags.Count);

                this.ApiManagementClient.RefreshAccessToken();

                // list all services
                var listResponse = this.ApiManagementClient.ResourceProvider.List(null);
                Assert.NotNull(listResponse);
                Assert.NotNull(listResponse.Value);
                Assert.True(listResponse.Value.Count >= 2);
                Assert.True(listResponse.Value.Any(service => service.Name == serviceName));

                // list services only within new group
                listResponse = this.ApiManagementClient.ResourceProvider.List(resourceGroupName);
                Assert.NotNull(listResponse);
                Assert.NotNull(listResponse.Value);

                Assert.True(listResponse.Value.Count >= 1);
                Assert.True(listResponse.Value.Any(service => service.Name == serviceName));
                Assert.True(listResponse.Value.All(service => service.Id.Contains(resourceGroupName)));

                // update service: current implementation update only tags
                var updateRequest = new ApiServiceCreateOrUpdateParameters
                {
                    Location   = Location,
                    Properties = new ApiServiceProperties // this should not change via update
                    {
                        AddresserEmail = "*****@*****.**",
                        PublisherEmail = "*****@*****.**",
                        PublisherName  = "changed.publisher"
                    },
                    SkuProperties = new ApiServiceSkuProperties
                    {
                        Capacity = 2,
                        SkuType  = SkuType.Standard
                    },
                    Tags = // only tags shoud be updated
                    {
                        { "tag1", "tag1 value" },
                        { "tag2", "tag2 value" }
                    }
                };

                var updateResponse = this.ApiManagementClient.ResourceProvider.CreateOrUpdate(resourceGroupName, serviceName,
                                                                                              updateRequest);
                Assert.NotNull(updateResponse);
                Assert.Equal(HttpStatusCode.OK, updateResponse.StatusCode);
                Assert.NotNull(updateResponse.Value);
                Assert.Equal("Succeeded", updateResponse.Value.Properties.ProvisioningState, StringComparer.CurrentCultureIgnoreCase);
                Assert.Equal(createServiceParameters.SkuProperties.Capacity, updateResponse.Value.SkuProperties.Capacity);
                Assert.Equal(createServiceParameters.SkuProperties.SkuType, updateResponse.Value.SkuProperties.SkuType);
                Assert.Equal(createServiceParameters.Properties.AddresserEmail, updateResponse.Value.Properties.AddresserEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherEmail, updateResponse.Value.Properties.PublisherEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherName, updateResponse.Value.Properties.PublisherName);
                Assert.Equal(2, updateResponse.Value.Tags.Count);
                Assert.Equal(1, updateResponse.Value.Tags.Count(keyValue => keyValue.Key == "tag1" && keyValue.Value == "tag1 value"));
                Assert.Equal(1, updateResponse.Value.Tags.Count(keyValue => keyValue.Key == "tag2" && keyValue.Value == "tag2 value"));

                getResponse = this.ApiManagementClient.ResourceProvider.Get(resourceGroupName, serviceName);
                Assert.NotNull(getResponse);
                Assert.Equal(HttpStatusCode.OK, getResponse.StatusCode);
                Assert.NotNull(getResponse.Value);
                Assert.Equal("Succeeded", getResponse.Value.Properties.ProvisioningState, StringComparer.CurrentCultureIgnoreCase);
                Assert.Equal(createServiceParameters.SkuProperties.Capacity, getResponse.Value.SkuProperties.Capacity);
                Assert.Equal(createServiceParameters.SkuProperties.SkuType, getResponse.Value.SkuProperties.SkuType);
                Assert.Equal(createServiceParameters.Properties.AddresserEmail, getResponse.Value.Properties.AddresserEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherEmail, getResponse.Value.Properties.PublisherEmail);
                Assert.Equal(createServiceParameters.Properties.PublisherName, getResponse.Value.Properties.PublisherName);
                Assert.Equal(2, getResponse.Value.Tags.Count);
                Assert.Equal(1, getResponse.Value.Tags.Count(keyValue => keyValue.Key == "tag1" && keyValue.Value == "tag1 value"));
                Assert.Equal(1, getResponse.Value.Tags.Count(keyValue => keyValue.Key == "tag2" && keyValue.Value == "tag2 value"));

                // delete service

                ApiManagementHelper.RefreshAccessToken(this.ApiManagementClient);

                var deleteResponse = this.ApiManagementClient.ResourceProvider.Delete(resourceGroupName, serviceName);
                Assert.NotNull(deleteResponse);
                Assert.Equal(HttpStatusCode.OK, deleteResponse.StatusCode);

                try
                {
                    this.ApiManagementClient.ResourceProvider.Get(resourceGroupName, serviceName);
                    Assert.True(false, "The code should not have been executed");
                }
                catch (CloudException ex)
                {
                    Assert.Equal(HttpStatusCode.NotFound, ex.Response.StatusCode);
                }
            }
        }