@Test public void testConfig() { Properties props = new Properties(); props.setProperty(Config.REPO_CLASS, InMemoryRepository.class.getName()); props.put(Config.VALIDATOR_PREFIX + "rejectAll", Reject.class.getName()); ConfigModule module = new ConfigModule(props); Injector injector = Guice.createInjector(module); Repository repo = injector.getInstance(Repository.class); Subject rejects = repo.register("rejects", new SubjectConfig.Builder() .addValidator("rejectAll").build()); boolean threw = false; try { rejects.register("stuff"); } catch (SchemaValidationException se) { threw = true; } Assert.assertTrue(threw); }
@Test public void testBuilder() { SubjectConfig conf = SubjectConfig.emptyConfig(); Assert.assertTrue(conf.getValidators().isEmpty()); SubjectConfig custom = new SubjectConfig.Builder() .set("k", "v") .set("repo.validators", "valid1, valid2 ,,") .addValidator("oneMore") .build(); Assert.assertEquals("v", custom.get("k")); Set<String> validators = custom.getValidators(); Assert.assertEquals(3, validators.size()); Assert.assertTrue(validators.contains("valid1")); Assert.assertTrue(validators.contains("valid2")); Assert.assertTrue(validators.contains("oneMore")); }
@Test public void testBuilderHashAndEquals() { SubjectConfig empty = SubjectConfig.emptyConfig(); Assert.assertEquals(empty, empty); SubjectConfig conf = new SubjectConfig.Builder().build(); Assert.assertEquals(empty, conf); SubjectConfig conf2 = new SubjectConfig.Builder() .set("repo.validators", null) .build(); // Explicitly setting empty or null validators is NOT the same as no validators // due to the default subject validators functionality (see Issue 38) Assert.assertNotEquals(conf, conf2); Assert.assertNotEquals(conf2, empty); Assert.assertNotEquals(conf.hashCode(), conf2.hashCode()); Assert.assertFalse(conf.equals(null)); Assert.assertFalse(conf.equals(new Object())); Assert.assertEquals(conf.hashCode(), empty.hashCode()); String k = "key"; String v = "val"; SubjectConfig custom = new SubjectConfig.Builder() .set(k, v).build(); SubjectConfig custom2 = new SubjectConfig.Builder() .set(custom.asMap()).build(); SubjectConfig custom3 = new SubjectConfig.Builder() .set(custom.asMap()).addValidator("foo").build(); Assert.assertEquals(custom, custom2); Assert.assertFalse(custom.equals(custom3)); Assert.assertFalse(custom.equals(conf)); Assert.assertEquals(custom.hashCode(), custom2.hashCode()); }
@Test public void testValidation() { SubjectConfig conf = new SubjectConfig.Builder().addValidator(ValidatorFactory.REJECT_VALIDATOR).build(); // lookup a subject that does not exist, when none do Subject none = repo.lookup(VALIDATING); Assert.assertNull("non-existent subject lookup should return null", none); // register a subject that should reject all schemas Subject sub = repo.register(VALIDATING, conf); Assert.assertNotNull("failed to register subject: " + VALIDATING, sub); boolean threw = false; try { sub.register("stuff"); } catch (SchemaValidationException e) { threw = true; } Assert.assertTrue("must throw a SchemaValidationException", threw); }
@Test public void testSuccessfulValidation() throws SchemaValidationException { Subject accept = repo.register(ACCEPT, new SubjectConfig.Builder() .addValidator(ACCEPT_VALIDATOR).build()); SchemaEntry foo = accept.registerIfLatest(FOO, null); Assert.assertNotNull("failed to register schema", foo); SchemaEntry bar = accept.registerIfLatest(BAR, foo); Assert.assertNotNull("failed to register schema", bar); SchemaEntry none = accept.registerIfLatest("nothing", null); Assert.assertNull(none); SchemaEntry baz = accept.register(BAZ); Assert.assertNotNull("failed to register schema", baz); }
@Test(expected=SchemaValidationException.class) public void testCannotRegisterIfLatest() throws SchemaValidationException { Subject reject = repo.register(REJECT, new SubjectConfig.Builder() .addValidator(ValidatorFactory.REJECT_VALIDATOR).build()); reject.registerIfLatest(FOO, null); }
@Test(expected=SchemaValidationException.class) public void testCannotRegister() throws SchemaValidationException { Subject reject = repo.register(REJECT, new SubjectConfig.Builder() .addValidator(ValidatorFactory.REJECT_VALIDATOR).build()); reject.register(FOO); }