Skip to content

Commit 06ef069

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 42f7432 commit 06ef069

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,13 @@ public String apiVersion() {
102102
public boolean equals(Object o) {
103103
if (this == o)
104104
return true;
105-
if (o == null || getClass() != o.getClass())
105+
if (!(o instanceof GroupVersionKind that))
106106
return false;
107-
GroupVersionKind that = (GroupVersionKind) o;
108-
return Objects.equals(apiVersion, that.apiVersion) && Objects.equals(kind, that.kind);
107+
return Objects.equals(apiVersion, that.apiVersion) && Objects.equals(kind, that.kind) && specificEquals(that) && that.specificEquals(this);
108+
}
109+
110+
protected boolean specificEquals(GroupVersionKind that) {
111+
return true;
109112
}
110113

111114
@Override
@@ -115,10 +118,7 @@ public int hashCode() {
115118

116119
@Override
117120
public String toString() {
118-
return "GroupVersionKind{" +
119-
"apiVersion='" + apiVersion + '\'' +
120-
", kind='" + kind + '\'' +
121-
'}';
121+
return toGVKString();
122122
}
123123

124124
}

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;
@@ -30,6 +31,24 @@ protected GroupVersionKindPlural(GroupVersionKind gvk, String plural) {
3031
: null));
3132
}
3233

34+
@Override
35+
protected boolean specificEquals(GroupVersionKind that) {
36+
if(plural == null) {
37+
return true;
38+
}
39+
return that instanceof GroupVersionKindPlural gvkp && gvkp.plural.equals(plural);
40+
}
41+
42+
@Override
43+
public int hashCode() {
44+
return plural != null ? Objects.hash(super.hashCode(), plural) : super.hashCode();
45+
}
46+
47+
@Override
48+
public String toString() {
49+
return toGVKString() + (plural != null ? " (plural: " + plural + ")" : "");
50+
}
51+
3352
/**
3453
* Creates a new GroupVersionKindPlural from the specified {@link GroupVersionKind}.
3554
*

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

+17-4
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,31 @@ void pluralShouldOnlyBeProvidedIfExplicitlySet() {
6262
@Test
6363
void pluralShouldBeEmptyIfNotProvided() {
6464
final var kind = "MyKind";
65-
var gvk =
66-
GroupVersionKindPlural.gvkWithPlural(new GroupVersionKind("josdk.io", "v1", kind), null);
65+
final var original = new GroupVersionKind("josdk.io", "v1", kind);
66+
var gvk = GroupVersionKindPlural.gvkWithPlural(original, null);
6767
assertThat(gvk.getPlural()).isEmpty();
6868
assertThat(gvk.getPluralOrDefault())
6969
.isEqualTo(GroupVersionKindPlural.getDefaultPluralFor(kind));
70+
assertThat(gvk).isEqualTo(original);
71+
assertThat(original).isEqualTo(gvk);
72+
assertThat(gvk.hashCode()).isEqualTo(original.hashCode());
7073
}
7174

7275
@Test
7376
void pluralShouldOverrideDefaultComputedVersionIfProvided() {
74-
var gvk = GroupVersionKindPlural.gvkWithPlural(new GroupVersionKind("josdk.io", "v1", "MyKind"),
75-
"MyPlural");
77+
final var original = new GroupVersionKind("josdk.io", "v1", "MyKind");
78+
final var gvk = GroupVersionKindPlural.gvkWithPlural(original, "MyPlural");
7679
assertThat(gvk.getPlural()).hasValue("MyPlural");
80+
assertThat(gvk).isNotEqualTo(original);
81+
assertThat(original).isNotEqualTo(gvk);
82+
assertThat(gvk.hashCode()).isNotEqualTo(original.hashCode());
83+
}
84+
85+
@Test
86+
void equals() {
87+
final var original = new GroupVersionKind("josdk.io", "v1", "MyKind");
88+
assertEquals(original, original);
89+
assertFalse(original.equals(null));
7790
}
7891

7992
@Test

0 commit comments

Comments
 (0)