Repository: incubator-slider Updated Branches: refs/heads/develop ebc216a7e -> 95cf1759e
SLIDER-838 add better assertions for test failures in agent provider tests Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/e9ace6a4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/e9ace6a4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/e9ace6a4 Branch: refs/heads/develop Commit: e9ace6a4fe5d1994ada092a72a52bc8f9d5fc4bb Parents: ebc216a Author: Steve Loughran <ste...@apache.org> Authored: Thu Apr 2 18:54:29 2015 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Thu Apr 2 18:54:29 2015 +0100 ---------------------------------------------------------------------- .../org/apache/slider/client/SliderClient.java | 12 +++-- .../providers/agent/AgentClientProvider.java | 4 +- .../actions/TestActionInstallPackage.groovy | 5 ++- .../agent/actions/TestActionPackage.groovy | 7 ++- .../agent/TestAgentClientProvider2.java | 47 +++++++++++--------- 5 files changed, 46 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/e9ace6a4/slider-core/src/main/java/org/apache/slider/client/SliderClient.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java index 053a1db..883942d 100644 --- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java +++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java @@ -204,6 +204,12 @@ import static org.apache.slider.common.params.SliderActions.*; public class SliderClient extends AbstractSliderLaunchedService implements RunService, SliderExitCodes, SliderKeys, ErrorStrings, SliderClientAPI { private static final Logger log = LoggerFactory.getLogger(SliderClient.class); + public static final String E_MUST_BE_A_VALID_JSON_FILE + = "Invalid configuration. Must be a valid json file."; + public static final String E_INVALID_APPLICATION_PACKAGE_LOCATION + = "A valid application package location required."; + public static final String E_INVALID_INSTALL_LOCATION + = "A valid install location must be provided for the client."; private static PrintStream clientOutputStream = System.out; // value should not be changed without updating string find in slider.py @@ -906,7 +912,7 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe } if (StringUtils.isEmpty(installPkgInfo.packageURI)) { - throw new BadCommandArgumentsException("A valid application package location required."); + throw new BadCommandArgumentsException(E_INVALID_APPLICATION_PACKAGE_LOCATION); } else { File pkgFile = new File(installPkgInfo.packageURI); if (!pkgFile.exists() || pkgFile.isDirectory()) { @@ -1030,7 +1036,7 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe if (clientInfo.installLocation == null) { throw new BadCommandArgumentsException( - "A valid install location must be provided for the client.\n" + E_INVALID_INSTALL_LOCATION +"\n" + CommonArgs.usage(serviceArgs, ACTION_CLIENT)); } else { if (!clientInfo.installLocation.exists()) { @@ -1061,7 +1067,7 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe config = new JSONObject(new String(encoded, Charset.defaultCharset())); }catch(JSONException jsonEx) { log.error("Unable to read supplied config", jsonEx); - throw new SliderException("Invalid configuration. Must be a valid json file.", jsonEx); + throw new BadConfigException(E_MUST_BE_A_VALID_JSON_FILE, jsonEx); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/e9ace6a4/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java index ed453ec..1df1533 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java @@ -82,6 +82,8 @@ public class AgentClientProvider extends AbstractClientProvider LoggerFactory.getLogger(AgentClientProvider.class); protected static final String NAME = "agent"; private static final ProviderUtils providerUtils = new ProviderUtils(log); + public static final String E_COULD_NOT_READ_METAINFO + = "Not a valid app package. Could not read metainfo."; protected AgentClientProvider(Configuration conf) { @@ -387,7 +389,7 @@ public class AgentClientProvider extends AbstractClientProvider } if (metaInfo == null) { - throw new SliderException("Not a valid app package. Could not read metainfo."); + throw new BadConfigException(E_COULD_NOT_READ_METAINFO); } expandAgentTar(agentPkgDir); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/e9ace6a4/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionInstallPackage.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionInstallPackage.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionInstallPackage.groovy index 064c7a9..2cc2431 100644 --- a/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionInstallPackage.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionInstallPackage.groovy @@ -22,9 +22,11 @@ import groovy.transform.CompileStatic import groovy.util.logging.Slf4j import org.apache.hadoop.yarn.conf.YarnConfiguration import org.apache.slider.agent.AgentMiniClusterTestBase +import org.apache.slider.client.SliderClient import org.apache.slider.common.params.Arguments import org.apache.slider.common.params.SliderActions import org.apache.slider.core.exceptions.BadCommandArgumentsException +import org.apache.slider.core.main.LauncherExitCodes import org.apache.slider.core.main.ServiceLauncher import org.junit.Before import org.junit.Test @@ -74,7 +76,8 @@ class TestActionInstallPackage extends AgentMiniClusterTestBase { ) fail("expected an exception, got a status code " + launcher.serviceExitCode) } catch (BadCommandArgumentsException e) { - assert e.message.contains("A valid application package location required") + assertExceptionDetails(e, LauncherExitCodes.EXIT_COMMAND_ARGUMENT_ERROR, + SliderClient.E_INVALID_APPLICATION_PACKAGE_LOCATION); } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/e9ace6a4/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionPackage.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionPackage.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionPackage.groovy index fa6145e..9edd830 100644 --- a/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionPackage.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/agent/actions/TestActionPackage.groovy @@ -22,9 +22,11 @@ import groovy.transform.CompileStatic import groovy.util.logging.Slf4j import org.apache.hadoop.yarn.conf.YarnConfiguration import org.apache.slider.agent.AgentMiniClusterTestBase +import org.apache.slider.client.SliderClient import org.apache.slider.common.params.Arguments import org.apache.slider.common.params.SliderActions import org.apache.slider.core.exceptions.BadCommandArgumentsException +import org.apache.slider.core.main.LauncherExitCodes import org.apache.slider.core.main.ServiceLauncher import org.junit.Before import org.junit.Test @@ -76,7 +78,8 @@ class TestActionPackage extends AgentMiniClusterTestBase { ) fail("expected an exception, got a status code " + launcher.serviceExitCode) } catch (BadCommandArgumentsException e) { - assert e.message.contains("A valid application package location required") + assertExceptionDetails(e, LauncherExitCodes.EXIT_COMMAND_ARGUMENT_ERROR, + SliderClient.E_INVALID_APPLICATION_PACKAGE_LOCATION); } } @@ -242,7 +245,7 @@ class TestActionPackage extends AgentMiniClusterTestBase { ) fail("expected an exception, got a status code " + launcher.serviceExitCode) } catch (BadCommandArgumentsException e) { - assert e.message.contains("Package does not exists") + assert e.message.contains("Package does not exist") } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/e9ace6a4/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java index 65e0fbd..6c9cdc5 100644 --- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java +++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentClientProvider2.java @@ -24,16 +24,19 @@ import org.apache.hadoop.registry.client.binding.RegistryUtils; import org.apache.log4j.BasicConfigurator; import org.apache.slider.api.InternalKeys; import org.apache.slider.client.SliderClient; +import org.apache.slider.common.SliderExitCodes; import org.apache.slider.common.params.ActionClientArgs; import org.apache.slider.common.tools.SliderFileSystem; import org.apache.slider.core.conf.AggregateConf; import org.apache.slider.core.conf.ConfTree; import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.BadConfigException; import org.apache.slider.core.exceptions.SliderException; import org.apache.slider.providers.ProviderUtils; import org.apache.slider.providers.agent.application.metadata.Application; import org.apache.slider.providers.agent.application.metadata.Metainfo; import org.apache.slider.providers.agent.application.metadata.Package; +import org.apache.slider.test.SliderTestUtils; import org.codehaus.jettison.json.JSONObject; import org.junit.Assert; import org.junit.BeforeClass; @@ -61,7 +64,7 @@ import static org.easymock.EasyMock.expect; */ @RunWith(PowerMockRunner.class) @PrepareForTest({ProviderUtils.class, ProcessBuilder.class, AgentClientProvider.class, RegistryUtils.class}) -public class TestAgentClientProvider2 { +public class TestAgentClientProvider2 extends SliderTestUtils { protected static final Logger log = LoggerFactory.getLogger(TestAgentClientProvider2.class); @Rule @@ -144,9 +147,9 @@ public class TestAgentClientProvider2 { clientInstallPath, appName); JSONObject outConfigs = output.getJSONObject("configurations"); - Assert.assertNotNull(outConfigs); + Assert.assertNotNull("null configurations section", outConfigs); JSONObject outGlobal = outConfigs.getJSONObject("global"); - Assert.assertNotNull(outGlobal); + Assert.assertNotNull("null globals section", outGlobal); Assert.assertEquals("b", outGlobal.getString("a")); Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d")); Assert.assertEquals("/tmp/file1", outGlobal.getString("app_install_dir")); @@ -163,21 +166,21 @@ public class TestAgentClientProvider2 { defaultConfig.put("global", global); output = provider.getCommandJson(defaultConfig, - inputConfig, - metainfo, - clientInstallPath, - null); + inputConfig, + metainfo, + clientInstallPath, + null); outConfigs = output.getJSONObject("configurations"); - Assert.assertNotNull(outConfigs); + Assert.assertNotNull("null configurations section", outConfigs); outGlobal = outConfigs.getJSONObject("global"); - Assert.assertNotNull(outGlobal); + Assert.assertNotNull("null globals section", outGlobal); Assert.assertEquals("b", outGlobal.getString("a")); Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d")); Assert.assertEquals("b2", outGlobal.getString("a1")); Assert.assertEquals("/tmp/file1/d", outGlobal.getString("d1")); Assert.assertEquals("/tmp/file1", outGlobal.getString("app_install_dir")); Assert.assertEquals("{app_name}", outGlobal.getString("e")); - Assert.assertFalse(outGlobal.has("app_name")); + Assert.assertFalse("no 'app_name' field", outGlobal.has("app_name")); Assert.assertEquals(user, outGlobal.getString("app_user")); PowerMock.verify(RegistryUtils.class); @@ -226,8 +229,8 @@ public class TestAgentClientProvider2 { try { client.actionClient(args); } catch (BadCommandArgumentsException e) { - log.info(e.getMessage()); - Assert.assertTrue(e.getMessage().contains("A valid install location must be provided for the client")); + assertExceptionDetails(e, SliderExitCodes.EXIT_COMMAND_ARGUMENT_ERROR, + SliderClient.E_INVALID_INSTALL_LOCATION); } File tmpFile = File.createTempFile("del", ""); @@ -236,16 +239,16 @@ public class TestAgentClientProvider2 { try { client.actionClient(args); } catch (BadCommandArgumentsException e) { - log.info(e.getMessage()); - Assert.assertTrue(e.getMessage().contains("Install path does not exist at")); + assertExceptionDetails(e, SliderExitCodes.EXIT_COMMAND_ARGUMENT_ERROR, + "Install path does not exist at"); } dest.mkdir(); try { client.actionClient(args); } catch (BadCommandArgumentsException e) { - log.info(e.getMessage()); - Assert.assertTrue(e.getMessage().contains("A valid application package location required")); + assertExceptionDetails(e, SliderExitCodes.EXIT_COMMAND_ARGUMENT_ERROR, + SliderClient.E_INVALID_APPLICATION_PACKAGE_LOCATION); } tmpFile = File.createTempFile("del", ".zip"); @@ -253,17 +256,17 @@ public class TestAgentClientProvider2 { args.clientConfig = tmpFile; try { client.actionClient(args); - } catch (SliderException e) { - log.info(e.getMessage()); - Assert.assertTrue(e.getMessage().contains("Invalid configuration. Must be a valid json file")); + } catch (BadConfigException e) { + assertExceptionDetails(e, SliderExitCodes.EXIT_BAD_CONFIGURATION, + SliderClient.E_MUST_BE_A_VALID_JSON_FILE); } args.clientConfig = null; try { client.actionClient(args); - } catch (SliderException e) { - log.info(e.getMessage()); - Assert.assertTrue(e.getMessage().contains("Not a valid app package. Could not read metainfo")); + } catch (BadConfigException e) { + assertExceptionDetails(e, SliderExitCodes.EXIT_BAD_CONFIGURATION, + AgentClientProvider.E_COULD_NOT_READ_METAINFO); } } }