Change ResourceUtils to use static create method and cache in driver classes
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/36604f72 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/36604f72 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/36604f72 Branch: refs/heads/0.6.0 Commit: 36604f72a0bb8cb19542cf1195125acfabd39204 Parents: e613ed8 Author: Andrew Kennedy <[email protected]> Authored: Mon Oct 14 22:39:03 2013 +0100 Committer: Andrew Kennedy <[email protected]> Committed: Wed Oct 30 11:19:59 2013 +0000 ---------------------------------------------------------------------- .../brooklyn/demo/CumulusRDFApplication.java | 2 +- .../demo/WebClusterDatabaseExampleApp.java | 4 +- .../entity/database/mysql/MySqlSshDriver.java | 6 +-- .../postgresql/PostgreSqlNodeChefImpl.java | 2 +- .../postgresql/PostgreSqlSshDriver.java | 3 +- .../database/rubyrep/RubyRepSshDriver.java | 5 +-- .../messaging/activemq/ActiveMQSshDriver.java | 4 +- .../nosql/cassandra/CassandraNodeSshDriver.java | 2 +- .../geoscaling/GeoscalingScriptGenerator.java | 4 +- .../entity/proxy/nginx/NginxControllerImpl.java | 4 +- .../entity/webapp/jboss/JBoss7SshDriver.java | 40 ++++++++++---------- .../GeoscalingScriptGeneratorTest.groovy | 4 +- 12 files changed, 39 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java ---------------------------------------------------------------------- diff --git a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java index 3d63a59..6fb69de 100644 --- a/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java +++ b/examples/simple-nosql-cluster/src/main/java/brooklyn/demo/CumulusRDFApplication.java @@ -116,7 +116,7 @@ public class CumulusRDFApplication extends AbstractApplication { // Process the YAML template given in the application config String url = Entities.getRequiredUrlConfig(CumulusRDFApplication.this, CUMULUS_RDF_CONFIG_URL); Map<String, Object> config = MutableMap.<String, Object>of("cassandraHostname", clusterEndpoint.getHostText(), "cassandraThriftPort", clusterEndpoint.getPort()); - String contents = TemplateProcessor.processTemplateContents(new ResourceUtils(this).getResourceAsString(url), config); + String contents = TemplateProcessor.processTemplateContents(ResourceUtils.create(this).getResourceAsString(url), config); // Copy the file contents to the remote machine DynamicTasks.queue(SshEffectorTasks.put("/tmp/cumulus.yaml").contents(contents)); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java ---------------------------------------------------------------------- diff --git a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java index f961634..34180f7 100644 --- a/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java +++ b/examples/simple-web-cluster/src/main/java/brooklyn/demo/WebClusterDatabaseExampleApp.java @@ -63,9 +63,9 @@ public class WebClusterDatabaseExampleApp extends AbstractApplication implements public static final String DEFAULT_LOCATION = "localhost"; - public static final String DEFAULT_WAR_PATH = new ResourceUtils(WebClusterDatabaseExampleApp.class). + public static final String DEFAULT_WAR_PATH = ResourceUtils.create(WebClusterDatabaseExampleApp.class) // take this war, from the classpath, or via maven if not on the classpath - firstAvailableUrl( + .firstAvailableUrl( "classpath://hello-world-sql-webapp.war", BrooklynMavenArtifacts.localUrl("example", "brooklyn-example-hello-world-sql-webapp", "war")) .or("classpath://hello-world-sql-webapp.war"); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java index 606244f..427b3ed 100644 --- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java +++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java @@ -2,6 +2,7 @@ package brooklyn.entity.database.mysql; import static brooklyn.util.GroovyJavaMethods.elvis; import static brooklyn.util.GroovyJavaMethods.truth; +import static brooklyn.util.ssh.BashCommands.commandsToDownloadUrlsAs; import static brooklyn.util.ssh.BashCommands.installPackage; import static brooklyn.util.ssh.BashCommands.ok; import static java.lang.String.format; @@ -22,7 +23,6 @@ import brooklyn.entity.drivers.downloads.DownloadResolver; import brooklyn.location.OsDetails; import brooklyn.location.basic.BasicOsDetails.OsVersions; import brooklyn.location.basic.SshMachineLocation; -import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableMap; import brooklyn.util.ssh.BashCommands; import brooklyn.util.text.ComparableVersion; @@ -101,7 +101,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements // these deps are needed on some OS versions but others don't need them so ignore failures (ok(...)) commands.add(ok(installPackage(ImmutableMap.of("yum", "libaio", "apt", "ia32-libs"), null))); commands.add("echo finished installing extra packages"); - commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs)); + commands.addAll(commandsToDownloadUrlsAs(urls, saveAs)); commands.add(format("tar xfvz %s", saveAs)); newScript(INSTALLING). @@ -146,7 +146,7 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements Reader creationScript; String url = entity.getConfig(MySqlNode.CREATION_SCRIPT_URL); if (!Strings.isBlank(url)) - creationScript = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(url)); + creationScript = new InputStreamReader(resource.getResourceFromUrl(url)); else creationScript = new StringReader((String) elvis(entity.getConfig(MySqlNode.CREATION_SCRIPT_CONTENTS), "")); getMachine().copyTo(creationScript, getRunDir() + "/creation-script.cnf"); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java index 32bd06a..1bb8645 100644 --- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java +++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNodeChefImpl.java @@ -73,7 +73,7 @@ public class PostgreSqlNodeChefImpl extends EffectorStartableImpl implements Pos String creationScript; String creationScriptUrl = entity().getConfig(PostgreSqlNode.CREATION_SCRIPT_URL); if (creationScriptUrl != null) - creationScript = new ResourceUtils(entity()).getResourceAsString(creationScriptUrl); + creationScript = ResourceUtils.create(entity()).getResourceAsString(creationScriptUrl); else creationScript = entity().getConfig(PostgreSqlNode.CREATION_SCRIPT_CONTENTS); entity().invoke(PostgreSqlNodeChefImpl.EXECUTE_SCRIPT, ConfigBag.newInstance().configure(ExecuteScriptEffectorBody.SCRIPT, creationScript).getAllConfig()).getUnchecked(); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java index 617e177..8dda553 100644 --- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java +++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java @@ -13,7 +13,6 @@ import org.slf4j.LoggerFactory; import brooklyn.entity.basic.AbstractSoftwareProcessSshDriver; import brooklyn.location.basic.SshMachineLocation; -import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableList; import brooklyn.util.collections.MutableMap; import brooklyn.util.net.Urls; @@ -129,7 +128,7 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver String creationScriptUrl = entity.getConfig(PostgreSqlNode.CREATION_SCRIPT_URL); Reader creationScript; if (creationScriptUrl != null) - creationScript = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(creationScriptUrl)); + creationScript = new InputStreamReader(resource.getResourceFromUrl(creationScriptUrl)); else creationScript = new StringReader(entity.getConfig(PostgreSqlNode.CREATION_SCRIPT_CONTENTS)); getMachine().copyTo(creationScript, getRunDir() + "/creation-script.sql"); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java index 44c1b9e..a732263 100644 --- a/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java +++ b/software/database/src/main/java/brooklyn/entity/database/rubyrep/RubyRepSshDriver.java @@ -1,6 +1,6 @@ package brooklyn.entity.database.rubyrep; -import static java.lang.String.format; +import static java.lang.String.*; import java.io.InputStreamReader; import java.io.Reader; @@ -18,7 +18,6 @@ import brooklyn.entity.basic.EntityLocal; import brooklyn.entity.database.mysql.MySqlSshDriver; import brooklyn.entity.java.JavaSoftwareProcessSshDriver; import brooklyn.location.basic.SshMachineLocation; -import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableMap; import brooklyn.util.ssh.BashCommands; @@ -68,7 +67,7 @@ public class RubyRepSshDriver extends JavaSoftwareProcessSshDriver implements Ru Reader configContents; if (configScriptUrl != null) { // If set accept as-is - configContents = new InputStreamReader(new ResourceUtils(entity).getResourceFromUrl(configScriptUrl)); + configContents = new InputStreamReader(resource.getResourceFromUrl(configScriptUrl)); } else { String configScriptContents = processTemplate(entity.getAttribute(RubyRepNode.TEMPLATE_CONFIGURATION_URL)); configContents = new StringReader(configScriptContents); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java ---------------------------------------------------------------------- diff --git a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java index 90d9739..7079b5a 100644 --- a/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java +++ b/software/messaging/src/main/java/brooklyn/entity/messaging/activemq/ActiveMQSshDriver.java @@ -1,6 +1,6 @@ package brooklyn.entity.messaging.activemq; -import static java.lang.String.format; +import static java.lang.String.*; import java.io.ByteArrayInputStream; import java.util.LinkedList; @@ -9,9 +9,7 @@ import java.util.Map; import brooklyn.entity.drivers.downloads.DownloadResolver; import brooklyn.entity.java.JavaSoftwareProcessSshDriver; -import brooklyn.entity.java.JmxSupport; import brooklyn.location.basic.SshMachineLocation; -import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableMap; import brooklyn.util.net.Networking; import brooklyn.util.ssh.BashCommands; http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java index 25b25e7..1d54fad 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/cassandra/CassandraNodeSshDriver.java @@ -167,7 +167,7 @@ public class CassandraNodeSshDriver extends JavaSoftwareProcessSshDriver impleme int lastSlashIndex = customSnitchJarUrl.lastIndexOf("/"); String customSnitchJarName = (lastSlashIndex > 0) ? customSnitchJarUrl.substring(lastSlashIndex+1) : "customBrooklynSnitch.jar"; String jarDestinationFile = String.format("%s/lib/%s", getRunDir(), customSnitchJarName); - InputStream customSnitchJarStream = checkNotNull(new ResourceUtils(entity).getResourceFromUrl(customSnitchJarUrl), "%s could not be loaded", customSnitchJarUrl); + InputStream customSnitchJarStream = checkNotNull(resource.getResourceFromUrl(customSnitchJarUrl), "%s could not be loaded", customSnitchJarUrl); try { getMachine().copyTo(customSnitchJarStream, jarDestinationFile); } finally { http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java index 518c885..b3b6bcb 100644 --- a/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java +++ b/software/webapp/src/main/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGenerator.java @@ -11,7 +11,7 @@ import brooklyn.util.ResourceUtils; import brooklyn.util.javalang.JavaClassNames; import brooklyn.util.text.Strings; -class GeoscalingScriptGenerator { +public class GeoscalingScriptGenerator { private static final String PHP_SCRIPT_TEMPLATE_RESOURCE = JavaClassNames.resolveClasspathUrl(GeoscalingScriptGenerator.class, "template.php"); private static final String HOSTS_DECLARATIONS_MARKER = "/* HOST DECLARATIONS TO BE SUBSTITUTED HERE */"; @@ -23,7 +23,7 @@ class GeoscalingScriptGenerator { } public static String generateScriptString(Date generationTime, Collection<HostGeoInfo> hosts) { - String template = new ResourceUtils(GeoscalingScriptGenerator.class).getResourceAsString(PHP_SCRIPT_TEMPLATE_RESOURCE); + String template = ResourceUtils.create(GeoscalingScriptGenerator.class).getResourceAsString(PHP_SCRIPT_TEMPLATE_RESOURCE); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'UTC'"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String datestamp = sdf.format(generationTime); http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java index d30b95f..8f730de 100644 --- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java +++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java @@ -208,14 +208,14 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx if (!Strings.isEmpty(ssl.getCertificateSourceUrl())) { String certificateDestination = Strings.isEmpty(ssl.getCertificateDestination()) ? driver.getRunDir() + "/conf/" + id + ".crt" : ssl.getCertificateDestination(); driver.getMachine().copyTo(ImmutableMap.of("permissions", "0400"), - new ResourceUtils(this).getResourceFromUrl(ssl.getCertificateSourceUrl()), + ResourceUtils.create(this).getResourceFromUrl(ssl.getCertificateSourceUrl()), certificateDestination); } if (!Strings.isEmpty(ssl.getKeySourceUrl())) { String keyDestination = Strings.isEmpty(ssl.getKeyDestination()) ? driver.getRunDir() + "/conf/" + id + ".key" : ssl.getKeyDestination(); driver.getMachine().copyTo(ImmutableMap.of("permissions", "0400"), - new ResourceUtils(this).getResourceFromUrl(ssl.getKeySourceUrl()), + ResourceUtils.create(this).getResourceFromUrl(ssl.getKeySourceUrl()), keyDestination); } http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java index 62c9803..540fd4d 100644 --- a/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java +++ b/software/webapp/src/main/java/brooklyn/entity/webapp/jboss/JBoss7SshDriver.java @@ -1,39 +1,41 @@ package brooklyn.entity.webapp.jboss; +import static java.lang.String.*; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import brooklyn.entity.basic.Entities; import brooklyn.entity.basic.SoftwareProcess; import brooklyn.entity.drivers.downloads.DownloadResolver; import brooklyn.entity.webapp.JavaWebAppSshDriver; import brooklyn.location.basic.SshMachineLocation; -import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableMap; import brooklyn.util.net.Networking; import brooklyn.util.ssh.BashCommands; + import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.hash.Hashing; import com.google.common.io.BaseEncoding; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import static java.lang.String.format; public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver { public static final Logger LOG = LoggerFactory.getLogger(JBoss7SshDriver.class); /* - * TODO - * - expose log file location, or even support accessing them dynamically - * - more configurability of config files, java memory, etc - */ + * TODO + * - expose log file location, or even support accessing them dynamically + * - more configurability of config files, java memory, etc + */ public static final String SERVER_TYPE = "standalone"; private static final String CONFIG_FILE = "standalone-brooklyn.xml"; @@ -110,13 +112,13 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver } public void install() { - DownloadResolver resolver = entity.getManagementContext().getEntityDownloadsManager().newDownloader(this); + DownloadResolver resolver = Entities.newDownloader(this); List<String> urls = resolver.getTargets(); String saveAs = resolver.getFilename(); expandedInstallDir = getInstallDir()+"/"+resolver.getUnpackedDirectoryName(format("jboss-as-%s", getVersion())); List<String> commands = new LinkedList<String>(); - commands.addAll(BashCommands.downloadUrlAs(urls, saveAs)); + commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs)); commands.add(BashCommands.INSTALL_TAR); commands.add("tar xzfv " + saveAs); @@ -186,7 +188,7 @@ public class JBoss7SshDriver extends JavaWebAppSshDriver implements JBoss7Driver throw new NullPointerException("keystore URL must be specified if using HTTPS for "+entity); } String destinationSslKeystoreFile = getSslKeystoreFile(); - InputStream keystoreStream = new ResourceUtils(this).getResourceFromUrl(keystoreUrl); + InputStream keystoreStream = resource.getResourceFromUrl(keystoreUrl); getMachine().copyTo(keystoreStream, destinationSslKeystoreFile); } http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/36604f72/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy index 16e925c..d296ce8 100644 --- a/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy +++ b/software/webapp/src/test/java/brooklyn/entity/dns/geoscaling/GeoscalingScriptGeneratorTest.groovy @@ -28,10 +28,10 @@ class GeoscalingScriptGeneratorTest { Date generationTime = new Date(0); String generatedScript = GeoscalingScriptGenerator.generateScriptString(generationTime, HOSTS); assertTrue(generatedScript.contains("1.2.3")); - String expectedScript = new ResourceUtils(this).getResourceAsString("brooklyn/entity/dns/geoscaling/expectedScript.php"); + String expectedScript = ResourceUtils.create(this).getResourceAsString("brooklyn/entity/dns/geoscaling/expectedScript.php"); assertEquals(expectedScript, generatedScript); //also make sure leading slash is allowed - String expectedScript2 = new ResourceUtils(this).getResourceAsString("/brooklyn/entity/dns/geoscaling/expectedScript.php"); + String expectedScript2 = ResourceUtils.create(this).getResourceAsString("/brooklyn/entity/dns/geoscaling/expectedScript.php"); assertEquals(expectedScript, generatedScript); }
