diff --git a/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java b/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java index 5bd594e83c12..96b5fd2239e2 100644 --- a/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java +++ b/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OptionsTest.java @@ -152,7 +152,11 @@ public void allOptionsAbsent() { assertThat(options.equals(null)).isFalse(); assertThat(options.equals(this)).isFalse(); assertNull(options.isolationLevel()); - assertThat(options.hashCode()).isEqualTo(31); + // Verify hashCode contract: equal objects must have equal hashCodes, and hashCode is stable. + Options options2 = Options.fromReadOptions(); + assertThat(options.equals(options2)).isTrue(); + assertThat(options.hashCode()).isEqualTo(options2.hashCode()); + assertThat(options.hashCode()).isEqualTo(options.hashCode()); } @Test @@ -175,7 +179,13 @@ public void listOptionsTest() { assertThat(options.pageSize()).isEqualTo(pageSize); assertThat(options.pageToken()).isEqualTo(pageToken); assertThat(options.filter()).isEqualTo(filter); - assertThat(options.hashCode()).isEqualTo(108027089); + // Verify hashCode contract: equal objects must have equal hashCodes, and hashCode is stable. + Options options2 = + Options.fromListOptions( + Options.pageSize(pageSize), Options.pageToken(pageToken), Options.filter(filter)); + assertThat(options.equals(options2)).isTrue(); + assertThat(options.hashCode()).isEqualTo(options2.hashCode()); + assertThat(options.hashCode()).isEqualTo(options.hashCode()); } @Test @@ -696,7 +706,11 @@ public void updateOptionsTest() { assertEquals("tag: " + tag + " ", options.toString()); assertTrue(options.hasTag()); assertThat(options.tag()).isEqualTo(tag); - assertThat(options.hashCode()).isEqualTo(-2118248262); + // Verify hashCode contract: equal objects must have equal hashCodes, and hashCode is stable. + Options options2 = Options.fromUpdateOptions(Options.tag(tag)); + assertThat(options.equals(options2)).isTrue(); + assertThat(options.hashCode()).isEqualTo(options2.hashCode()); + assertThat(options.hashCode()).isEqualTo(options.hashCode()); } @Test @@ -728,7 +742,11 @@ public void transactionOptionsTest() { assertEquals("tag: " + tag + " ", options.toString()); assertTrue(options.hasTag()); assertThat(options.tag()).isEqualTo(tag); - assertThat(options.hashCode()).isEqualTo(-2118248262); + // Verify hashCode contract: equal objects must have equal hashCodes, and hashCode is stable. + Options options2 = Options.fromTransactionOptions(Options.tag(tag)); + assertThat(options.equals(options2)).isTrue(); + assertThat(options.hashCode()).isEqualTo(options2.hashCode()); + assertThat(options.hashCode()).isEqualTo(options.hashCode()); } @Test