You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2017/05/09 21:17:04 UTC
[5/6] curator git commit: Work on testing modeled schema
Work on testing modeled schema
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/23a14879
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/23a14879
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/23a14879
Branch: refs/heads/CURATOR-397
Commit: 23a1487984b576b878e3a88287f74d9381e5dec7
Parents: 555e1d4
Author: randgalt <ra...@apache.org>
Authored: Mon May 8 19:11:22 2017 +0200
Committer: randgalt <ra...@apache.org>
Committed: Mon May 8 19:11:22 2017 +0200
----------------------------------------------------------------------
.../apache/curator/framework/schema/Schema.java | 2 +-
.../x/async/modeled/details/ModelSpecImpl.java | 24 ++++++++++------
.../x/async/modeled/TestModeledFramework.java | 30 ++++++++++++++++++++
3 files changed, 47 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/23a14879/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java b/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
index e9f4f18..bcb35d3 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/schema/Schema.java
@@ -318,7 +318,7 @@ public class Schema
", pathRegex=" + pathRegex +
", path='" + fixedPath + '\'' +
", documentation='" + documentation + '\'' +
- ", dataValidator=" + schemaValidator +
+ ", dataValidator=" + schemaValidator.getClass() +
", ephemeral=" + ephemeral +
", sequential=" + sequential +
", watched=" + watched +
http://git-wip-us.apache.org/repos/asf/curator/blob/23a14879/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelSpecImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelSpecImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelSpecImpl.java
index 3a4a504..847ce61 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelSpecImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelSpecImpl.java
@@ -29,6 +29,7 @@ import org.apache.curator.x.async.modeled.ModelSerializer;
import org.apache.curator.x.async.modeled.ModelSpec;
import org.apache.curator.x.async.modeled.ZPath;
import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.data.ACL;
import java.util.List;
import java.util.Objects;
@@ -207,18 +208,25 @@ public class ModelSpecImpl<T> implements ModelSpec<T>, SchemaValidator
@Override
public boolean isValid(Schema schema, String path, byte[] data, List<ACL> acl)
{
- if ( !acl.equals(aclList) )
+ if ( acl != null )
{
- throw new SchemaViolation(schema, new SchemaViolation.ViolatorData(path, data, acl), "ACLs do not match model ACLs");
+ List<ACL> localAclList = (aclList.size() > 0) ? aclList : ZooDefs.Ids.OPEN_ACL_UNSAFE;
+ if ( !acl.equals(localAclList) )
+ {
+ throw new SchemaViolation(schema, new SchemaViolation.ViolatorData(path, data, acl), "ACLs do not match model ACLs");
+ }
}
- try
+ if ( data != null )
{
- serializer.deserialize(data);
- }
- catch ( RuntimeException e )
- {
- throw new SchemaViolation(schema, new SchemaViolation.ViolatorData(path, data, acl), "Data cannot be deserialized into a model");
+ try
+ {
+ serializer.deserialize(data);
+ }
+ catch ( RuntimeException e )
+ {
+ throw new SchemaViolation(schema, new SchemaViolation.ViolatorData(path, data, acl), "Data cannot be deserialized into a model");
+ }
}
return true;
}
http://git-wip-us.apache.org/repos/asf/curator/blob/23a14879/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
index a7884ee..209c463 100644
--- a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
+++ b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledFramework.java
@@ -21,6 +21,9 @@ package org.apache.curator.x.async.modeled;
import com.google.common.collect.Sets;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.schema.Schema;
+import org.apache.curator.framework.schema.SchemaSet;
+import org.apache.curator.framework.schema.SchemaViolation;
import org.apache.curator.retry.RetryOneTime;
import org.apache.curator.utils.CloseableUtils;
import org.apache.curator.x.async.AsyncCuratorFramework;
@@ -33,6 +36,7 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.math.BigInteger;
+import java.util.Collections;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
@@ -129,4 +133,30 @@ public class TestModeledFramework extends CompletableBaseClassForTests
ModeledFramework<TestModel> client = ModeledFramework.builder(async, modelSpec).watched().build();
complete(client.read().whenComplete((model, e) -> Assert.assertTrue(e instanceof RuntimeException)));
}
+
+ @Test
+ public void testSchema() throws Exception
+ {
+ Schema schema = modelSpec.schema();
+ try ( CuratorFramework schemaClient = CuratorFrameworkFactory.builder()
+ .connectString(server.getConnectString())
+ .retryPolicy(new RetryOneTime(1))
+ .schemaSet(new SchemaSet(Collections.singletonList(schema), false))
+ .build() ) {
+ schemaClient.start();
+
+ try
+ {
+ schemaClient.create().forPath(modelSpec.path().fullPath(), "asflasfas".getBytes());
+ Assert.fail("Should've thrown SchemaViolation");
+ }
+ catch ( SchemaViolation dummy )
+ {
+ // expected
+ }
+
+ ModeledFramework<TestModel> modeledSchemaClient = ModeledFramework.wrap(AsyncCuratorFramework.wrap(schemaClient), modelSpec);
+ complete(modeledSchemaClient.set(new TestModel("one", "two", "three", 4, BigInteger.ONE)), (dummy, e) -> Assert.assertNull(e));
+ }
+ }
}