/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. */ package com.microsoft.azure.management.sql; import com.microsoft.azure.management.resources.core.TestUtilities; import com.microsoft.azure.management.resources.fluentcore.arm.Region; import com.microsoft.azure.management.resources.fluentcore.model.Creatable; import com.microsoft.azure.management.resources.fluentcore.model.Indexable; import com.microsoft.azure.management.resources.fluentcore.utils.Utils; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import rx.Observable; import java.util.ArrayList; import java.util.List; import java.util.Map; public class SqlServerOperationsTests extends SqlServerTest { private static final String SQL_DATABASE_NAME = "myTestDatabase2"; private static final String COLLATION = "SQL_Latin1_General_CP1_CI_AS"; private static final String SQL_ELASTIC_POOL_NAME = "testElasticPool"; private static final String SQL_FIREWALLRULE_NAME = "firewallrule1"; private static final String START_IPADDRESS = "10.102.1.10"; private static final String END_IPADDRESS = "10.102.1.12"; @Ignore("Depends on the existing SQL server") @Test public void canListRecommendedElasticPools() throws Exception { SqlServer sqlServer = sqlServerManager.sqlServers().getByResourceGroup("ans", "ans-secondary"); sqlServer.databases().list().get(0).listServiceTierAdvisors().values().iterator().next().serviceLevelObjectiveUsageMetrics(); Map<String, RecommendedElasticPool> recommendedElasticPools = sqlServer.listRecommendedElasticPools(); Assert.assertNotNull(recommendedElasticPools); Assert.assertNotNull(sqlServer.databases().list().get(0).getUpgradeHint()); } @Test public void canCRUDSqlServer() throws Exception { // Create SqlServer sqlServer = createSqlServer(); validateSqlServer(sqlServer); List<ServiceObjective> serviceObjectives = sqlServer.listServiceObjectives(); Assert.assertNotEquals(serviceObjectives.size(), 0); Assert.assertNotNull(serviceObjectives.get(0).refresh()); Assert.assertNotNull(sqlServer.getServiceObjective("d1737d22-a8ea-4de7-9bd0-33395d2a7419")); sqlServer.update().withAdministratorPassword("P@ssword~2").apply(); // List List<SqlServer> sqlServers = sqlServerManager.sqlServers().listByResourceGroup(RG_NAME); boolean found = false; for (SqlServer server : sqlServers) { if (server.name().equals(SQL_SERVER_NAME)) { found = true; } } Assert.assertTrue(found); // Get sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); Assert.assertNotNull(sqlServer); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canUseCoolShortcutsForResourceCreation() throws Exception { String database2Name = "database2"; String database1InEPName = "database1InEP"; String database2InEPName = "database2InEP"; String elasticPool2Name = "elasticPool2"; String elasticPool3Name = "elasticPool3"; String elasticPool1Name = SQL_ELASTIC_POOL_NAME; // Create SqlServer sqlServer = sqlServerManager.sqlServers().define(SQL_SERVER_NAME) .withRegion(Region.US_CENTRAL) .withNewResourceGroup(RG_NAME) .withAdministratorLogin("userName") .withAdministratorPassword("Password~1") .withNewDatabase(SQL_DATABASE_NAME) .withNewDatabase(database2Name) .withNewElasticPool(elasticPool1Name, ElasticPoolEditions.STANDARD) .withNewElasticPool(elasticPool2Name, ElasticPoolEditions.PREMIUM, database1InEPName, database2InEPName) .withNewElasticPool(elasticPool3Name, ElasticPoolEditions.STANDARD) .withNewFirewallRule(START_IPADDRESS, END_IPADDRESS, SQL_FIREWALLRULE_NAME) .withNewFirewallRule(START_IPADDRESS, END_IPADDRESS) .withNewFirewallRule(START_IPADDRESS) .create(); validateMultiCreation(database2Name, database1InEPName, database2InEPName, elasticPool1Name, elasticPool2Name, elasticPool3Name, sqlServer, false); elasticPool1Name = SQL_ELASTIC_POOL_NAME + " U"; database2Name = "database2U"; database1InEPName = "database1InEPU"; database2InEPName = "database2InEPU"; elasticPool2Name = "elasticPool2U"; elasticPool3Name = "elasticPool3U"; // Update sqlServer = sqlServer.update() .withNewDatabase(SQL_DATABASE_NAME).withNewDatabase(database2Name) .withNewElasticPool(elasticPool1Name, ElasticPoolEditions.STANDARD) .withNewElasticPool(elasticPool2Name, ElasticPoolEditions.PREMIUM, database1InEPName, database2InEPName) .withNewElasticPool(elasticPool3Name, ElasticPoolEditions.STANDARD) .withNewFirewallRule(START_IPADDRESS, END_IPADDRESS, SQL_FIREWALLRULE_NAME) .withNewFirewallRule(START_IPADDRESS, END_IPADDRESS) .withNewFirewallRule(START_IPADDRESS) .apply(); validateMultiCreation(database2Name, database1InEPName, database2InEPName, elasticPool1Name, elasticPool2Name, elasticPool3Name, sqlServer, true); sqlServer.refresh(); Assert.assertEquals(sqlServer.elasticPools().list().size(), 0); // List List<SqlServer> sqlServers = sqlServerManager.sqlServers().listByResourceGroup(RG_NAME); boolean found = false; for (SqlServer server : sqlServers) { if (server.name().equals(SQL_SERVER_NAME)) { found = true; } } Assert.assertTrue(found); // Get sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); Assert.assertNotNull(sqlServer); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canCRUDSqlDatabase() throws Exception { // Create SqlServer sqlServer = createSqlServer(); Observable<Indexable> resourceStream = sqlServer.databases() .define(SQL_DATABASE_NAME) .createAsync(); SqlDatabase sqlDatabase = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); validateSqlDatabase(sqlDatabase, SQL_DATABASE_NAME); Assert.assertTrue(sqlServer.databases().list().size() > 0); // Test transparent data encryption settings. TransparentDataEncryption transparentDataEncryption = sqlDatabase.getTransparentDataEncryption(); Assert.assertNotNull(transparentDataEncryption.status()); List<TransparentDataEncryptionActivity> transparentDataEncryptionActivities = transparentDataEncryption.listActivities(); Assert.assertNotNull(transparentDataEncryptionActivities); transparentDataEncryption = transparentDataEncryption.updateStatus(TransparentDataEncryptionStates.ENABLED); Assert.assertNotNull(transparentDataEncryption); Assert.assertEquals(transparentDataEncryption.status(), TransparentDataEncryptionStates.ENABLED); transparentDataEncryptionActivities = transparentDataEncryption.listActivities(); Assert.assertNotNull(transparentDataEncryptionActivities); TestUtilities.sleep(10000); transparentDataEncryption = sqlDatabase.getTransparentDataEncryption().updateStatus(TransparentDataEncryptionStates.DISABLED); Assert.assertNotNull(transparentDataEncryption); Assert.assertEquals(transparentDataEncryption.status(), TransparentDataEncryptionStates.DISABLED); Assert.assertEquals(transparentDataEncryption.sqlServerName(), SQL_SERVER_NAME); Assert.assertEquals(transparentDataEncryption.databaseName(), SQL_DATABASE_NAME); Assert.assertNotNull(transparentDataEncryption.name()); Assert.assertNotNull(transparentDataEncryption.id()); // Done testing with encryption settings. Assert.assertNotNull(sqlDatabase.getUpgradeHint()); // Test Service tier advisors. Map<String, ServiceTierAdvisor> serviceTierAdvisors = sqlDatabase.listServiceTierAdvisors(); Assert.assertNotNull(serviceTierAdvisors); Assert.assertNotNull(serviceTierAdvisors.values().iterator().next().serviceLevelObjectiveUsageMetrics()); Assert.assertNotEquals(serviceTierAdvisors.size(), 0); Assert.assertNotNull(serviceTierAdvisors.values().iterator().next().refresh()); Assert.assertNotNull(serviceTierAdvisors.values().iterator().next().serviceLevelObjectiveUsageMetrics()); // End of testing service tier advisors. sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); validateSqlServer(sqlServer); // Create another database with above created database as source database. Creatable<SqlElasticPool> sqlElasticPoolCreatable = sqlServer.elasticPools() .define(SQL_ELASTIC_POOL_NAME) .withEdition(ElasticPoolEditions.STANDARD); String anotherDatabaseName = "anotherDatabase"; SqlDatabase anotherDatabase = sqlServer.databases() .define(anotherDatabaseName) .withNewElasticPool(sqlElasticPoolCreatable) .withSourceDatabase(sqlDatabase.id()) .withMode(CreateMode.COPY) .create(); validateSqlDatabaseWithElasticPool(anotherDatabase, anotherDatabaseName); sqlServer.databases().delete(anotherDatabase.name()); // Get validateSqlDatabase(sqlServer.databases().get(SQL_DATABASE_NAME), SQL_DATABASE_NAME); // List validateListSqlDatabase(sqlServer.databases().list()); // Delete sqlServer.databases().delete(SQL_DATABASE_NAME); validateSqlDatabaseNotFound(SQL_DATABASE_NAME); // Add another database to the server resourceStream = sqlServer.databases() .define("newDatabase") .withEdition(DatabaseEditions.STANDARD) .withCollation(COLLATION) .createAsync(); sqlDatabase = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); sqlServer.databases().delete(sqlDatabase.name()); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canManageReplicationLinks() throws Exception { // Create String anotherSqlServerName = SQL_SERVER_NAME + "another"; SqlServer sqlServer1 = createSqlServer(); SqlServer sqlServer2 = createSqlServer(anotherSqlServerName); Observable<Indexable> resourceStream = sqlServer1.databases() .define(SQL_DATABASE_NAME) .withEdition(DatabaseEditions.STANDARD) .withCollation(COLLATION) .createAsync(); SqlDatabase databaseInServer1 = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); validateSqlDatabase(databaseInServer1, SQL_DATABASE_NAME); SqlDatabase databaseInServer2 = sqlServer2.databases() .define(SQL_DATABASE_NAME) .withSourceDatabase(databaseInServer1.id()) .withMode(CreateMode.ONLINE_SECONDARY) .create(); TestUtilities.sleep(2000); List<ReplicationLink> replicationLinksInDb1 = new ArrayList<>(databaseInServer1.listReplicationLinks().values()); Assert.assertEquals(replicationLinksInDb1.size() , 1); Assert.assertEquals(replicationLinksInDb1.get(0).partnerDatabase(), databaseInServer2.name()); Assert.assertEquals(replicationLinksInDb1.get(0).partnerServer(), databaseInServer2.sqlServerName()); List<ReplicationLink> replicationLinksInDb2 = new ArrayList<>(databaseInServer2.listReplicationLinks().values()); Assert.assertEquals(replicationLinksInDb2.size() , 1); Assert.assertEquals(replicationLinksInDb2.get(0).partnerDatabase(), databaseInServer1.name()); Assert.assertEquals(replicationLinksInDb2.get(0).partnerServer(), databaseInServer1.sqlServerName()); Assert.assertNotNull(replicationLinksInDb1.get(0).refresh()); // Failover replicationLinksInDb2.get(0).failover(); replicationLinksInDb2.get(0).refresh(); TestUtilities.sleep(30000); // Force failover replicationLinksInDb1.get(0).forceFailoverAllowDataLoss(); replicationLinksInDb1.get(0).refresh(); TestUtilities.sleep(30000); replicationLinksInDb2.get(0).delete(); Assert.assertEquals(databaseInServer2.listReplicationLinks().size(), 0); sqlServer1.databases().delete(databaseInServer1.name()); sqlServer2.databases().delete(databaseInServer2.name()); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer2.resourceGroupName(), sqlServer2.name()); validateSqlServerNotFound(sqlServer2); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer1.resourceGroupName(), sqlServer1.name()); validateSqlServerNotFound(sqlServer1); } @Test public void canDoOperationsOnDataWarehouse() throws Exception { // Create SqlServer sqlServer = createSqlServer(); validateSqlServer(sqlServer); // List usages for the server. Assert.assertNotNull(sqlServer.listUsages()); Observable<Indexable> resourceStream = sqlServer.databases() .define(SQL_DATABASE_NAME) .withEdition(DatabaseEditions.DATA_WAREHOUSE) .withCollation(COLLATION) .createAsync(); SqlDatabase sqlDatabase = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); Assert.assertNotNull(sqlDatabase); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertNotNull(sqlDatabase); Assert.assertTrue(sqlDatabase.isDataWarehouse()); // Get SqlWarehouse dataWarehouse = sqlServer.databases().get(SQL_DATABASE_NAME).asWarehouse(); Assert.assertNotNull(dataWarehouse); Assert.assertEquals(dataWarehouse.name(), SQL_DATABASE_NAME); Assert.assertEquals(dataWarehouse.edition(), DatabaseEditions.DATA_WAREHOUSE); // List Restore points. Assert.assertNotNull(dataWarehouse.listRestorePoints()); // Get usages. Assert.assertNotNull(dataWarehouse.listUsages()); // Pause warehouse dataWarehouse.pauseDataWarehouse(); // Resume warehouse dataWarehouse.resumeDataWarehouse(); sqlServer.databases().delete(SQL_DATABASE_NAME); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canCRUDSqlDatabaseWithElasticPool() throws Exception { // Create SqlServer sqlServer = createSqlServer(); Creatable<SqlElasticPool> sqlElasticPoolCreatable = sqlServer.elasticPools() .define(SQL_ELASTIC_POOL_NAME) .withEdition(ElasticPoolEditions.STANDARD); Observable<Indexable> resourceStream = sqlServer.databases() .define(SQL_DATABASE_NAME) .withNewElasticPool(sqlElasticPoolCreatable) .withCollation(COLLATION) .createAsync(); SqlDatabase sqlDatabase = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); validateSqlDatabase(sqlDatabase, SQL_DATABASE_NAME); sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); validateSqlServer(sqlServer); // Get Elastic pool SqlElasticPool elasticPool = sqlServer.elasticPools().get(SQL_ELASTIC_POOL_NAME); validateSqlElasticPool(elasticPool); // Get validateSqlDatabaseWithElasticPool(sqlServer.databases().get(SQL_DATABASE_NAME), SQL_DATABASE_NAME); // List validateListSqlDatabase(sqlServer.databases().list()); // Remove database from elastic pools. sqlDatabase.update() .withoutElasticPool() .withEdition(DatabaseEditions.STANDARD) .withServiceObjective(ServiceObjectiveName.S3) .apply(); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertNull(sqlDatabase.elasticPoolName()); // Update edition of the SQL database sqlDatabase.update() .withEdition(DatabaseEditions.PREMIUM) .withServiceObjective(ServiceObjectiveName.P1) .apply(); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertEquals(sqlDatabase.edition(), DatabaseEditions.PREMIUM); Assert.assertEquals(sqlDatabase.serviceLevelObjective(), ServiceObjectiveName.P1); // Update just the service level objective for database. sqlDatabase.update().withServiceObjective(ServiceObjectiveName.P2).apply(); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertEquals(sqlDatabase.serviceLevelObjective(), ServiceObjectiveName.P2); Assert.assertEquals(sqlDatabase.requestedServiceObjectiveName(), ServiceObjectiveName.P2); // Update max size bytes of the database. sqlDatabase.update() .withMaxSizeBytes(268435456000L) .apply(); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertEquals(sqlDatabase.maxSizeBytes(), 268435456000L); // Put the database back in elastic pool. sqlDatabase.update() .withExistingElasticPool(SQL_ELASTIC_POOL_NAME) .apply(); sqlDatabase = sqlServer.databases().get(SQL_DATABASE_NAME); Assert.assertEquals(sqlDatabase.elasticPoolName(), SQL_ELASTIC_POOL_NAME); // List Activity in elastic pool Assert.assertNotNull(elasticPool.listActivities()); // List Database activity in elastic pool. Assert.assertNotNull(elasticPool.listDatabaseActivities()); // List databases in elastic pool. List<SqlDatabase> databasesInElasticPool = elasticPool.listDatabases(); Assert.assertNotNull(databasesInElasticPool); Assert.assertEquals(databasesInElasticPool.size(), 1); // Get a particular database in elastic pool. SqlDatabase databaseInElasticPool = elasticPool.getDatabase(SQL_DATABASE_NAME); validateSqlDatabase(databaseInElasticPool, SQL_DATABASE_NAME); // Refresh works on the database got from elastic pool. databaseInElasticPool.refresh(); // Validate that trying to get an invalid database from elastic pool returns null. try { elasticPool.getDatabase("does_not_exist"); Assert.assertNotNull(null); } catch(Exception ex) { } // Delete sqlServer.databases().delete(SQL_DATABASE_NAME); validateSqlDatabaseNotFound(SQL_DATABASE_NAME); SqlElasticPool sqlElasticPool = sqlServer.elasticPools().get(SQL_ELASTIC_POOL_NAME); // Add another database to the server and pool. resourceStream = sqlServer.databases() .define("newDatabase") .withExistingElasticPool(sqlElasticPool) .withCollation(COLLATION) .createAsync(); sqlDatabase = Utils.<SqlDatabase>rootResource(resourceStream) .toBlocking() .first(); sqlServer.databases().delete(sqlDatabase.name()); validateSqlDatabaseNotFound("newDatabase"); sqlServer.elasticPools().delete(SQL_ELASTIC_POOL_NAME); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canCRUDSqlElasticPool() throws Exception { // Create SqlServer sqlServer = createSqlServer(); sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); validateSqlServer(sqlServer); Observable<Indexable> resourceStream = sqlServer.elasticPools() .define(SQL_ELASTIC_POOL_NAME) .withEdition(ElasticPoolEditions.STANDARD) .createAsync(); SqlElasticPool sqlElasticPool = Utils.<SqlElasticPool>rootResource(resourceStream) .toBlocking() .first(); validateSqlElasticPool(sqlElasticPool); Assert.assertEquals(sqlElasticPool.listDatabases().size(), 0); sqlElasticPool = sqlElasticPool.update() .withDtu(100) .withDatabaseDtuMax(20) .withDatabaseDtuMin(10) .withStorageCapacity(102400) .withNewDatabase(SQL_DATABASE_NAME) .apply(); validateSqlElasticPool(sqlElasticPool); Assert.assertEquals(sqlElasticPool.listDatabases().size(), 1); // Get validateSqlElasticPool(sqlServer.elasticPools().get(SQL_ELASTIC_POOL_NAME)); // List validateListSqlElasticPool(sqlServer.elasticPools().list()); // Delete sqlServer.databases().delete(SQL_DATABASE_NAME); sqlServer.elasticPools().delete(SQL_ELASTIC_POOL_NAME); validateSqlElasticPoolNotFound(sqlServer, SQL_ELASTIC_POOL_NAME); // Add another database to the server resourceStream = sqlServer.elasticPools() .define("newElasticPool") .withEdition(ElasticPoolEditions.STANDARD) .createAsync(); sqlElasticPool = Utils.<SqlElasticPool>rootResource(resourceStream) .toBlocking() .first(); sqlServer.elasticPools().delete(sqlElasticPool.name()); validateSqlElasticPoolNotFound(sqlServer, "newElasticPool"); sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } @Test public void canCRUDSqlFirewallRule() throws Exception { // Create SqlServer sqlServer = createSqlServer(); sqlServer = sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME); validateSqlServer(sqlServer); Observable<Indexable> resourceStream = sqlServer.firewallRules() .define(SQL_FIREWALLRULE_NAME) .withIPAddressRange(START_IPADDRESS, END_IPADDRESS) .createAsync(); SqlFirewallRule sqlFirewallRule = Utils.<SqlFirewallRule>rootResource(resourceStream) .toBlocking() .first(); validateSqlFirewallRule(sqlFirewallRule, SQL_FIREWALLRULE_NAME); validateSqlFirewallRule(sqlServer.firewallRules().get(SQL_FIREWALLRULE_NAME), SQL_FIREWALLRULE_NAME); String secondFirewallRuleName = "secondFireWallRule"; SqlFirewallRule secondFirewallRule = sqlServer.firewallRules() .define(secondFirewallRuleName) .withIPAddress(START_IPADDRESS) .create(); Assert.assertNotNull(secondFirewallRule); secondFirewallRule = sqlServer.firewallRules().get(secondFirewallRuleName); Assert.assertNotNull(secondFirewallRule); Assert.assertEquals(START_IPADDRESS, secondFirewallRule.endIPAddress()); secondFirewallRule = secondFirewallRule.update().withEndIPAddress(END_IPADDRESS).apply(); validateSqlFirewallRule(secondFirewallRule, secondFirewallRuleName); sqlServer.firewallRules().delete(secondFirewallRuleName); Assert.assertNull(sqlServer.firewallRules().get(secondFirewallRuleName)); // Get sqlFirewallRule = sqlServer.firewallRules().get(SQL_FIREWALLRULE_NAME); validateSqlFirewallRule(sqlFirewallRule, SQL_FIREWALLRULE_NAME); // Update // Making start and end IP address same. sqlFirewallRule.update().withEndIPAddress(START_IPADDRESS).apply(); sqlFirewallRule = sqlServer.firewallRules().get(SQL_FIREWALLRULE_NAME); Assert.assertEquals(sqlFirewallRule.endIPAddress(), START_IPADDRESS); // List validateListSqlFirewallRule(sqlServer.firewallRules().list()); // Delete sqlServer.firewallRules().delete(sqlFirewallRule.name()); validateSqlFirewallRuleNotFound(); // Delete server sqlServerManager.sqlServers().deleteByResourceGroup(sqlServer.resourceGroupName(), sqlServer.name()); validateSqlServerNotFound(sqlServer); } private static void validateMultiCreation( String database2Name, String database1InEPName, String database2InEPName, String elasticPool1Name, String elasticPool2Name, String elasticPool3Name, SqlServer sqlServer, boolean deleteUsingUpdate) { validateSqlServer(sqlServer); validateSqlServer(sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME)); validateSqlDatabase(sqlServer.databases().get(SQL_DATABASE_NAME), SQL_DATABASE_NAME); validateSqlFirewallRule(sqlServer.firewallRules().get(SQL_FIREWALLRULE_NAME), SQL_FIREWALLRULE_NAME); List<SqlFirewallRule> firewalls = sqlServer.firewallRules().list(); Assert.assertEquals(3, firewalls.size()); int startIPAddress = 0; int endIPAddress = 0; for (SqlFirewallRule firewall: firewalls) { if (!firewall.name().equalsIgnoreCase(SQL_FIREWALLRULE_NAME)) { Assert.assertEquals(firewall.startIPAddress(), START_IPADDRESS); if (firewall.endIPAddress().equalsIgnoreCase(START_IPADDRESS)) { startIPAddress++; } else if (firewall.endIPAddress().equalsIgnoreCase(END_IPADDRESS)) { endIPAddress++; } } } Assert.assertEquals(startIPAddress, 1); Assert.assertEquals(endIPAddress, 1); Assert.assertNotNull(sqlServer.databases().get(database2Name)); Assert.assertNotNull(sqlServer.databases().get(database1InEPName)); Assert.assertNotNull(sqlServer.databases().get(database2InEPName)); SqlElasticPool ep1 = sqlServer.elasticPools().get(elasticPool1Name); validateSqlElasticPool(ep1, elasticPool1Name); SqlElasticPool ep2 = sqlServer.elasticPools().get(elasticPool2Name); Assert.assertNotNull(ep2); Assert.assertEquals(ep2.edition(), ElasticPoolEditions.PREMIUM); Assert.assertEquals(ep2.listDatabases().size(), 2); Assert.assertNotNull(ep2.getDatabase(database1InEPName)); Assert.assertNotNull(ep2.getDatabase(database2InEPName)); SqlElasticPool ep3 = sqlServer.elasticPools().get(elasticPool3Name); Assert.assertNotNull(ep3); Assert.assertEquals(ep3.edition(), ElasticPoolEditions.STANDARD); if (!deleteUsingUpdate) { sqlServer.databases().delete(database2Name); sqlServer.databases().delete(database1InEPName); sqlServer.databases().delete(database2InEPName); sqlServer.databases().delete(SQL_DATABASE_NAME); Assert.assertEquals(ep1.listDatabases().size(), 0); Assert.assertEquals(ep2.listDatabases().size(), 0); Assert.assertEquals(ep3.listDatabases().size(), 0); sqlServer.elasticPools().delete(elasticPool1Name); sqlServer.elasticPools().delete(elasticPool2Name); sqlServer.elasticPools().delete(elasticPool3Name); firewalls = sqlServer.firewallRules().list(); for (SqlFirewallRule firewallRule :firewalls) { firewallRule.delete(); } } else { sqlServer.update() .withoutDatabase(database2Name) .withoutElasticPool(elasticPool1Name) .withoutElasticPool(elasticPool2Name) .withoutElasticPool(elasticPool3Name) .withoutElasticPool(elasticPool1Name) .withoutDatabase(database1InEPName) .withoutDatabase(SQL_DATABASE_NAME) .withoutDatabase(database2InEPName) .withoutFirewallRule(SQL_FIREWALLRULE_NAME) .apply(); Assert.assertEquals(sqlServer.elasticPools().list().size(), 0); firewalls = sqlServer.firewallRules().list(); Assert.assertEquals(firewalls.size(), 2); for (SqlFirewallRule firewallRule :firewalls) { firewallRule.delete(); } } Assert.assertEquals(sqlServer.elasticPools().list().size(), 0); // Only master database is remaining in the SQLServer. Assert.assertEquals(sqlServer.databases().list().size(), 1); } private static void validateSqlFirewallRuleNotFound() { Assert.assertNull(sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME).firewallRules().get(SQL_FIREWALLRULE_NAME)); } private static void validateSqlElasticPoolNotFound(SqlServer sqlServer, String elasticPoolName) { Assert.assertNull(sqlServer.elasticPools().get(elasticPoolName)); } private static void validateSqlDatabaseNotFound(String newDatabase) { Assert.assertNull(sqlServerManager.sqlServers().getByResourceGroup(RG_NAME, SQL_SERVER_NAME).databases().get(newDatabase)); } private static void validateSqlServerNotFound(SqlServer sqlServer) { Assert.assertNull(sqlServerManager.sqlServers().getById(sqlServer.id())); } private static SqlServer createSqlServer() { return createSqlServer(SQL_SERVER_NAME); } private static SqlServer createSqlServer(String SQL_SERVER_NAME) { return sqlServerManager.sqlServers() .define(SQL_SERVER_NAME) .withRegion(Region.US_CENTRAL) .withNewResourceGroup(RG_NAME) .withAdministratorLogin("userName") .withAdministratorPassword("P@ssword~1") .create(); } private static void validateListSqlFirewallRule(List<SqlFirewallRule> sqlFirewallRules) { boolean found = false; for (SqlFirewallRule firewallRule: sqlFirewallRules) { if (firewallRule.name().equals(SQL_FIREWALLRULE_NAME)) { found = true; } } Assert.assertTrue(found); } private static void validateSqlFirewallRule(SqlFirewallRule sqlFirewallRule, String firewallName) { Assert.assertNotNull(sqlFirewallRule); Assert.assertEquals(firewallName, sqlFirewallRule.name()); Assert.assertEquals(SQL_SERVER_NAME, sqlFirewallRule.sqlServerName()); Assert.assertEquals(START_IPADDRESS, sqlFirewallRule.startIPAddress()); Assert.assertEquals(END_IPADDRESS, sqlFirewallRule.endIPAddress()); Assert.assertEquals(RG_NAME, sqlFirewallRule.resourceGroupName()); Assert.assertEquals(SQL_SERVER_NAME, sqlFirewallRule.sqlServerName()); Assert.assertEquals(Region.US_CENTRAL, sqlFirewallRule.region()); } private static void validateListSqlElasticPool(List<SqlElasticPool> sqlElasticPools) { boolean found = false; for (SqlElasticPool elasticPool : sqlElasticPools) { if (elasticPool.name().equals(SQL_ELASTIC_POOL_NAME)) { found = true; } } Assert.assertTrue(found); } private static void validateSqlElasticPool(SqlElasticPool sqlElasticPool) { validateSqlElasticPool(sqlElasticPool, SQL_ELASTIC_POOL_NAME); } private static void validateSqlElasticPool(SqlElasticPool sqlElasticPool, String elasticPoolName) { Assert.assertNotNull(sqlElasticPool); Assert.assertEquals(RG_NAME, sqlElasticPool.resourceGroupName()); Assert.assertEquals(elasticPoolName, sqlElasticPool.name()); Assert.assertEquals(SQL_SERVER_NAME, sqlElasticPool.sqlServerName()); Assert.assertEquals(ElasticPoolEditions.STANDARD, sqlElasticPool.edition()); Assert.assertNotNull(sqlElasticPool.creationDate()); Assert.assertNotEquals(0, sqlElasticPool.databaseDtuMax()); Assert.assertNotEquals(0, sqlElasticPool.dtu()); } private static void validateListSqlDatabase(List<SqlDatabase> sqlDatabases) { boolean found = false; for (SqlDatabase database : sqlDatabases) { if (database.name().equals(SQL_DATABASE_NAME)) { found = true; } } Assert.assertTrue(found); } private static void validateSqlServer(SqlServer sqlServer) { Assert.assertNotNull(sqlServer); Assert.assertEquals(RG_NAME, sqlServer.resourceGroupName()); Assert.assertNotNull(sqlServer.fullyQualifiedDomainName()); Assert.assertEquals(ServerVersion.ONE_TWO_FULL_STOP_ZERO, sqlServer.version()); Assert.assertEquals("userName", sqlServer.administratorLogin()); } private static void validateSqlDatabase(SqlDatabase sqlDatabase, String databaseName) { Assert.assertNotNull(sqlDatabase); Assert.assertEquals(sqlDatabase.name(), databaseName); Assert.assertEquals(SQL_SERVER_NAME, sqlDatabase.sqlServerName()); Assert.assertEquals(sqlDatabase.collation(), COLLATION); Assert.assertEquals(sqlDatabase.edition(), DatabaseEditions.STANDARD); } private static void validateSqlDatabaseWithElasticPool(SqlDatabase sqlDatabase, String databaseName) { validateSqlDatabase(sqlDatabase, databaseName); Assert.assertEquals(SQL_ELASTIC_POOL_NAME, sqlDatabase.elasticPoolName()); } }