Skip to content

Commit eb3dfbf

Browse files
committed
fix: a GVKP with no plural should be equivalent to the same GVK
Signed-off-by: Chris Laprun <[email protected]>
1 parent 15bbe92 commit eb3dfbf

File tree

3 files changed

+46
-16
lines changed

3 files changed

+46
-16
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,15 @@ public String apiVersion() {
101101
@Override
102102
public boolean equals(Object o) {
103103
if (this == o) return true;
104-
if (o == null || getClass() != o.getClass()) return false;
105-
GroupVersionKind that = (GroupVersionKind) o;
106-
return Objects.equals(apiVersion, that.apiVersion) && Objects.equals(kind, that.kind);
104+
if (!(o instanceof GroupVersionKind that)) return false;
105+
return Objects.equals(apiVersion, that.apiVersion)
106+
&& Objects.equals(kind, that.kind)
107+
&& specificEquals(that)
108+
&& that.specificEquals(this);
109+
}
110+
111+
protected boolean specificEquals(GroupVersionKind that) {
112+
return true;
107113
}
108114

109115
@Override
@@ -113,13 +119,6 @@ public int hashCode() {
113119

114120
@Override
115121
public String toString() {
116-
return "GroupVersionKind{"
117-
+ "apiVersion='"
118-
+ apiVersion
119-
+ '\''
120-
+ ", kind='"
121-
+ kind
122-
+ '\''
123-
+ '}';
122+
return toGVKString();
124123
}
125124
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GroupVersionKindPlural.java

+19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

3+
import java.util.Objects;
34
import java.util.Optional;
45

56
import io.fabric8.kubernetes.api.Pluralize;
@@ -35,6 +36,24 @@ protected GroupVersionKindPlural(GroupVersionKind gvk, String plural) {
3536
: null));
3637
}
3738

39+
@Override
40+
protected boolean specificEquals(GroupVersionKind that) {
41+
if (plural == null) {
42+
return true;
43+
}
44+
return that instanceof GroupVersionKindPlural gvkp && gvkp.plural.equals(plural);
45+
}
46+
47+
@Override
48+
public int hashCode() {
49+
return plural != null ? Objects.hash(super.hashCode(), plural) : super.hashCode();
50+
}
51+
52+
@Override
53+
public String toString() {
54+
return toGVKString() + (plural != null ? " (plural: " + plural + ")" : "");
55+
}
56+
3857
/**
3958
* Creates a new GroupVersionKindPlural from the specified {@link GroupVersionKind}.
4059
*

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,31 @@ void pluralShouldOnlyBeProvidedIfExplicitlySet() {
6161
@Test
6262
void pluralShouldBeEmptyIfNotProvided() {
6363
final var kind = "MyKind";
64-
var gvk =
65-
GroupVersionKindPlural.gvkWithPlural(new GroupVersionKind("josdk.io", "v1", kind), null);
64+
final var original = new GroupVersionKind("josdk.io", "v1", kind);
65+
var gvk = GroupVersionKindPlural.gvkWithPlural(original, null);
6666
assertThat(gvk.getPlural()).isEmpty();
6767
assertThat(gvk.getPluralOrDefault())
6868
.isEqualTo(GroupVersionKindPlural.getDefaultPluralFor(kind));
69+
assertThat(gvk).isEqualTo(original);
70+
assertThat(original).isEqualTo(gvk);
71+
assertThat(gvk.hashCode()).isEqualTo(original.hashCode());
6972
}
7073

7174
@Test
7275
void pluralShouldOverrideDefaultComputedVersionIfProvided() {
73-
var gvk =
74-
GroupVersionKindPlural.gvkWithPlural(
75-
new GroupVersionKind("josdk.io", "v1", "MyKind"), "MyPlural");
76+
final var original = new GroupVersionKind("josdk.io", "v1", "MyKind");
77+
final var gvk = GroupVersionKindPlural.gvkWithPlural(original, "MyPlural");
7678
assertThat(gvk.getPlural()).hasValue("MyPlural");
79+
assertThat(gvk).isNotEqualTo(original);
80+
assertThat(original).isNotEqualTo(gvk);
81+
assertThat(gvk.hashCode()).isNotEqualTo(original.hashCode());
82+
}
83+
84+
@Test
85+
void equals() {
86+
final var original = new GroupVersionKind("josdk.io", "v1", "MyKind");
87+
assertEquals(original, original);
88+
assertFalse(original.equals(null));
7789
}
7890

7991
@Test

0 commit comments

Comments
 (0)