@Test public void testUpdateVersion() { assertThat(VersionType.INTERNAL.updateVersion(Versions.NOT_SET, 10), equalTo(1l)); assertThat(VersionType.INTERNAL.updateVersion(Versions.NOT_FOUND, 10), equalTo(1l)); assertThat(VersionType.INTERNAL.updateVersion(1, 1), equalTo(2l)); assertThat(VersionType.INTERNAL.updateVersion(2, Versions.MATCH_ANY), equalTo(3l)); assertThat(VersionType.EXTERNAL.updateVersion(Versions.NOT_SET, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL.updateVersion(Versions.NOT_FOUND, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL.updateVersion(1, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL_GTE.updateVersion(Versions.NOT_SET, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL_GTE.updateVersion(Versions.NOT_FOUND, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL_GTE.updateVersion(1, 10), equalTo(10l)); assertThat(VersionType.EXTERNAL_GTE.updateVersion(10, 10), equalTo(10l)); assertThat(VersionType.FORCE.updateVersion(Versions.NOT_SET, 10), equalTo(10l)); assertThat(VersionType.FORCE.updateVersion(Versions.NOT_FOUND, 10), equalTo(10l)); assertThat(VersionType.FORCE.updateVersion(11, 10), equalTo(10l)); // Old indexing code // if (index.versionType() == VersionType.INTERNAL) { // internal version type // updatedVersion = (currentVersion == Versions.NOT_SET || currentVersion == // Versions.NOT_FOUND) ? 1 : currentVersion + 1; // } else { // external version type // updatedVersion = expectedVersion; // } }
@Test public void testVersionValidation() { assertTrue( VersionType.EXTERNAL.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse(VersionType.EXTERNAL.validateVersionForWrites(Versions.MATCH_ANY)); assertFalse( VersionType.EXTERNAL.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0))); assertTrue(VersionType.EXTERNAL.validateVersionForReads(Versions.MATCH_ANY)); assertTrue( VersionType.EXTERNAL.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse( VersionType.EXTERNAL.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1))); assertTrue( VersionType.EXTERNAL_GTE.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse(VersionType.EXTERNAL_GTE.validateVersionForWrites(Versions.MATCH_ANY)); assertFalse( VersionType.EXTERNAL_GTE.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0))); assertTrue(VersionType.EXTERNAL_GTE.validateVersionForReads(Versions.MATCH_ANY)); assertTrue( VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse( VersionType.EXTERNAL_GTE.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1))); assertTrue(VersionType.FORCE.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse(VersionType.FORCE.validateVersionForWrites(Versions.MATCH_ANY)); assertFalse(VersionType.FORCE.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0))); assertTrue(VersionType.FORCE.validateVersionForReads(Versions.MATCH_ANY)); assertTrue(VersionType.FORCE.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse(VersionType.FORCE.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1))); assertTrue( VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(1, Integer.MAX_VALUE))); assertTrue(VersionType.INTERNAL.validateVersionForWrites(Versions.MATCH_ANY)); assertFalse( VersionType.INTERNAL.validateVersionForWrites(randomIntBetween(Integer.MIN_VALUE, 0))); assertTrue(VersionType.INTERNAL.validateVersionForReads(Versions.MATCH_ANY)); assertTrue( VersionType.INTERNAL.validateVersionForReads(randomIntBetween(1, Integer.MAX_VALUE))); assertFalse( VersionType.INTERNAL.validateVersionForReads(randomIntBetween(Integer.MIN_VALUE, -1))); }
public void testExternalGTEVersionConflict() throws Exception { assertFalse( VersionType.EXTERNAL_GTE.isVersionConflictForWrites( Versions.NOT_FOUND, 10, randomBoolean())); // MATCH_ANY must throw an exception in the case of external version, as the version must be // set! it used as the new value assertTrue( VersionType.EXTERNAL_GTE.isVersionConflictForWrites( 10, Versions.MATCH_ANY, randomBoolean())); // if we didn't find a version (but the index does support it), we always accept assertFalse( VersionType.EXTERNAL_GTE.isVersionConflictForWrites( Versions.NOT_FOUND, Versions.NOT_FOUND, randomBoolean())); assertFalse( VersionType.EXTERNAL_GTE.isVersionConflictForWrites( Versions.NOT_FOUND, 10, randomBoolean())); assertTrue( VersionType.EXTERNAL_GTE.isVersionConflictForReads(Versions.NOT_FOUND, Versions.NOT_FOUND)); assertTrue(VersionType.EXTERNAL_GTE.isVersionConflictForReads(Versions.NOT_FOUND, 10)); assertFalse( VersionType.EXTERNAL_GTE.isVersionConflictForReads(Versions.NOT_FOUND, Versions.MATCH_ANY)); // and the standard behavior assertFalse(VersionType.EXTERNAL_GTE.isVersionConflictForWrites(10, 10, randomBoolean())); assertFalse(VersionType.EXTERNAL_GTE.isVersionConflictForWrites(9, 10, randomBoolean())); assertTrue(VersionType.EXTERNAL_GTE.isVersionConflictForWrites(10, 9, randomBoolean())); assertFalse(VersionType.EXTERNAL_GTE.isVersionConflictForReads(10, 10)); assertTrue(VersionType.EXTERNAL_GTE.isVersionConflictForReads(9, 10)); assertTrue(VersionType.EXTERNAL_GTE.isVersionConflictForReads(10, 9)); assertFalse(VersionType.EXTERNAL_GTE.isVersionConflictForReads(10, Versions.MATCH_ANY)); }