You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by so...@apache.org on 2015/05/11 23:55:48 UTC
falcon git commit: FALCON-1195 ClusterEntityParserTest fails
intermittently. Contributed by Balu Vellanki
Repository: falcon
Updated Branches:
refs/heads/master 3e81a69ab -> 41af88ffc
FALCON-1195 ClusterEntityParserTest fails intermittently. Contributed by Balu Vellanki
Project: http://git-wip-us.apache.org/repos/asf/falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/falcon/commit/41af88ff
Tree: http://git-wip-us.apache.org/repos/asf/falcon/tree/41af88ff
Diff: http://git-wip-us.apache.org/repos/asf/falcon/diff/41af88ff
Branch: refs/heads/master
Commit: 41af88ffc07f36b80650792c8567330a26d4c43d
Parents: 3e81a69
Author: Sowmya Ramesh <sr...@hortonworks.com>
Authored: Mon May 11 14:55:43 2015 -0700
Committer: Sowmya Ramesh <sr...@hortonworks.com>
Committed: Mon May 11 14:55:43 2015 -0700
----------------------------------------------------------------------
.../entity/parser/ClusterEntityParser.java | 2 +-
.../entity/parser/ClusterEntityParserTest.java | 93 ++++++++++++--------
2 files changed, 59 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/falcon/blob/41af88ff/common/src/main/java/org/apache/falcon/entity/parser/ClusterEntityParser.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/falcon/entity/parser/ClusterEntityParser.java b/common/src/main/java/org/apache/falcon/entity/parser/ClusterEntityParser.java
index 4555cb0..5c3ce4f 100644
--- a/common/src/main/java/org/apache/falcon/entity/parser/ClusterEntityParser.java
+++ b/common/src/main/java/org/apache/falcon/entity/parser/ClusterEntityParser.java
@@ -294,7 +294,7 @@ public class ClusterEntityParser extends EntityParser<Cluster> {
if (stagingLocation.getPath().equals(workingLocation.getPath())) {
throw new ValidationException(
"Location with name: " + stagingLocation.getName().value() + " and " + workingLocation
- .getName().value() + " cannot of same path: " + stagingLocation.getPath()
+ .getName().value() + " cannot have same path: " + stagingLocation.getPath()
+ " for cluster :" + cluster.getName());
} else {
http://git-wip-us.apache.org/repos/asf/falcon/blob/41af88ff/common/src/test/java/org/apache/falcon/entity/parser/ClusterEntityParserTest.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/falcon/entity/parser/ClusterEntityParserTest.java b/common/src/test/java/org/apache/falcon/entity/parser/ClusterEntityParserTest.java
index 4920d03..0408c2a 100644
--- a/common/src/test/java/org/apache/falcon/entity/parser/ClusterEntityParserTest.java
+++ b/common/src/test/java/org/apache/falcon/entity/parser/ClusterEntityParserTest.java
@@ -18,6 +18,7 @@
package org.apache.falcon.entity.parser;
+import org.apache.commons.lang3.StringUtils;
import org.apache.falcon.FalconException;
import org.apache.falcon.catalog.CatalogServiceFactory;
import org.apache.falcon.cluster.util.EmbeddedCluster;
@@ -53,6 +54,7 @@ import java.io.StringWriter;
public class ClusterEntityParserTest extends AbstractTestBase {
private final ClusterEntityParser parser = (ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER);
+ private final String CLUSTER_LOCATIONS_BASE_DIR = "/projects/falcon/ClusterEntityParserTestLocations/";
@Test
public void testParse() throws IOException, FalconException, JAXBException {
@@ -62,6 +64,8 @@ public class ClusterEntityParserTest extends AbstractTestBase {
Cluster cluster = parser.parse(stream);
ClusterHelper.getInterface(cluster, Interfacetype.WRITE)
.setEndpoint(conf.get(HadoopClientFactory.FS_DEFAULT_NAME_KEY));
+ Locations locations = getClusterLocations("staging0","working0");
+ cluster.setLocations(locations);
Assert.assertNotNull(cluster);
Assert.assertEquals(cluster.getName(), "testCluster");
@@ -84,7 +88,9 @@ public class ClusterEntityParserTest extends AbstractTestBase {
Assert.assertEquals(workflow.getVersion(), "4.0");
Assert.assertEquals(ClusterHelper.getLocation(cluster, ClusterLocationType.STAGING).getPath(),
- "/projects/falcon/staging");
+ CLUSTER_LOCATIONS_BASE_DIR + "staging0");
+ Assert.assertEquals(ClusterHelper.getLocation(cluster, ClusterLocationType.WORKING).getPath(),
+ CLUSTER_LOCATIONS_BASE_DIR + "working0");
StringWriter stringWriter = new StringWriter();
Marshaller marshaller = EntityType.CLUSTER.getMarshaller();
@@ -95,8 +101,7 @@ public class ClusterEntityParserTest extends AbstractTestBase {
Assert.assertEquals(catalog.getEndpoint(), "http://localhost:48080/templeton/v1");
Assert.assertEquals(catalog.getVersion(), "0.11.0");
- Assert.assertEquals(ClusterHelper.getLocation(cluster, ClusterLocationType.STAGING).getPath(),
- "/projects/falcon/staging");
+
}
@Test
@@ -205,18 +210,15 @@ public class ClusterEntityParserTest extends AbstractTestBase {
*
* @throws ValidationException
*/
- @Test(expectedExceptions = ValidationException.class) public void testClusterWithoutStaging() throws Exception {
+ @Test(expectedExceptions = ValidationException.class, expectedExceptionsMessageRegExp = ".*Unable to find.*")
+ public void testClusterWithoutStaging() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster) this.dfsCluster.getCluster().copy();
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
- Location location = new Location();
- location.setName(ClusterLocationType.WORKING);
- location.setPath("/apps/non/existent/path");
- Locations locations = new Locations();
- locations.getLocations().add(location);
+ Locations locations = getClusterLocations(null, "non/existent/path");
cluster.setLocations(locations);
clusterEntityParser.validate(cluster);
Assert.fail("Should have thrown a validation exception");
@@ -228,28 +230,17 @@ public class ClusterEntityParserTest extends AbstractTestBase {
*
* @throws ValidationException
*/
- @Test(expectedExceptions = ValidationException.class)
+ @Test(expectedExceptions = ValidationException.class, expectedExceptionsMessageRegExp = ".*Location.*must exist.")
public void testClusterWithInvalidLocationsPaths() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster)this.dfsCluster.getCluster().copy();
- Location location = new Location();
- location.setName(ClusterLocationType.STAGING);
- location.setPath("/apps/non/existent/path");
- Locations locations = new Locations();
- locations.getLocations().add(location);
+ Locations locations = getClusterLocations("non/existent/path", null);
cluster.setLocations(locations);
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
- try {
- clusterEntityParser.validate(cluster);
- } catch (ValidationException e) {
- String errorMessage =
- "Location " + location.getPath() + " for cluster " + cluster.getName() + " must exist.";
- Assert.assertEquals(e.getMessage(), errorMessage);
- throw e;
- }
+ clusterEntityParser.validate(cluster);
Assert.fail("Should have thrown a validation exception");
}
@@ -259,12 +250,15 @@ public class ClusterEntityParserTest extends AbstractTestBase {
*
* @throws ValidationException
*/
- @Test(expectedExceptions = ValidationException.class)
+ @Test(expectedExceptions = ValidationException.class, expectedExceptionsMessageRegExp = ".*same path:.*")
public void testClusterWithSameWorkingAndStaging() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster) this.dfsCluster.getCluster().copy();
- cluster.getLocations().getLocations().get(1).setPath("/projects/falcon/staging");
+ Locations locations = getClusterLocations("staging1", "staging1");
+ cluster.setLocations(locations);
+ this.dfsCluster.getFileSystem().mkdirs(new Path(cluster.getLocations().getLocations().get(0).getPath()),
+ HadoopClientFactory.ALL_PERMISSION);
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
@@ -277,11 +271,13 @@ public class ClusterEntityParserTest extends AbstractTestBase {
* It should automatically get generated
* Extensive tests are found in ClusterEntityValidationIT.
*/
- @Test public void testClusterWithOnlyStaging() throws Exception {
+ @Test
+ public void testClusterWithOnlyStaging() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster) this.dfsCluster.getCluster().copy();
- cluster.getLocations().getLocations().remove(1);
+ Locations locations = getClusterLocations("staging2", null);
+ cluster.setLocations(locations);
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
@@ -303,16 +299,21 @@ public class ClusterEntityParserTest extends AbstractTestBase {
*
* @throws ValidationException
*/
- @Test(expectedExceptions = ValidationException.class)
+ @Test(expectedExceptions = ValidationException.class, expectedExceptionsMessageRegExp = ".*rwxr-xr-x.*rwxrwxrwx")
public void testClusterWithSubdirInStaging() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster) this.dfsCluster.getCluster().copy();
- cluster.getLocations().getLocations().get(1).setPath("/projects/falcon/staging");
- cluster.getLocations().getLocations().remove(1);
+ Locations locations = getClusterLocations("staging3", null);
+ cluster.setLocations(locations);
+
+ HadoopClientFactory.mkdirs(this.dfsCluster.getFileSystem(),
+ new Path(cluster.getLocations().getLocations().get(0).getPath()),
+ HadoopClientFactory.ALL_PERMISSION);
HadoopClientFactory.mkdirs(this.dfsCluster.getFileSystem(),
- new Path(ClusterHelper.getLocation(cluster, ClusterLocationType.WORKING).getPath()),
+ new Path(cluster.getLocations().getLocations().get(0).getPath() + "/working"),
HadoopClientFactory.ALL_PERMISSION);
+
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
@@ -328,13 +329,13 @@ public class ClusterEntityParserTest extends AbstractTestBase {
*
* @throws ValidationException
*/
- @Test(expectedExceptions = ValidationException.class)
+ @Test(expectedExceptions = ValidationException.class, expectedExceptionsMessageRegExp = ".*rwxr-xr-x.*rwxrwxrwx")
public void testClusterWithStagingPermission() throws Exception {
ClusterEntityParser clusterEntityParser = Mockito
.spy((ClusterEntityParser) EntityParserFactory.getParser(EntityType.CLUSTER));
Cluster cluster = (Cluster) this.dfsCluster.getCluster().copy();
- cluster.getLocations().getLocations().get(0).setPath("/projects/falcon/staging2");
- cluster.getLocations().getLocations().remove(1);
+ Locations locations = getClusterLocations("staging4", null);
+ cluster.setLocations(locations);
Mockito.doNothing().when(clusterEntityParser).validateWorkflowInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateMessagingInterface(cluster);
Mockito.doNothing().when(clusterEntityParser).validateRegistryInterface(cluster);
@@ -348,10 +349,32 @@ public class ClusterEntityParserTest extends AbstractTestBase {
public void init() throws Exception {
this.dfsCluster = EmbeddedCluster.newCluster("testCluster");
this.conf = dfsCluster.getConf();
+ this.dfsCluster.getFileSystem().mkdirs(new Path(CLUSTER_LOCATIONS_BASE_DIR));
}
@AfterClass
- public void tearDown() {
+ public void tearDown() throws IOException {
+ this.dfsCluster.getFileSystem().delete(new Path(CLUSTER_LOCATIONS_BASE_DIR), true);
this.dfsCluster.shutdown();
}
+
+ private Locations getClusterLocations(String staging, String working) {
+ Locations locations = new Locations();
+
+ Location loc = new Location();
+ loc.setName(ClusterLocationType.STAGING);
+ if (StringUtils.isNotEmpty(staging)) {
+ loc.setPath(CLUSTER_LOCATIONS_BASE_DIR + staging);
+ locations.getLocations().add(loc);
+ }
+
+ loc = new Location();
+ loc.setName(ClusterLocationType.WORKING);
+ if (StringUtils.isNotEmpty(working)) {
+ loc.setPath(CLUSTER_LOCATIONS_BASE_DIR + working);
+ locations.getLocations().add(loc);
+ }
+
+ return locations;
+ }
}