|
20 | 20 |
|
21 | 21 | import org.junit.jupiter.api.BeforeEach; |
22 | 22 | import org.junit.jupiter.api.Test; |
| 23 | +import org.slf4j.Logger; |
| 24 | +import org.slf4j.LoggerFactory; |
23 | 25 |
|
24 | 26 | import io.fabric8.kubernetes.api.model.HasMetadata; |
25 | 27 | import io.fabric8.kubernetes.client.KubernetesClient; |
|
37 | 39 | import io.javaoperatorsdk.operator.sample.simple.TestCustomResource; |
38 | 40 |
|
39 | 41 | import static io.javaoperatorsdk.operator.api.reconciler.PrimaryUpdateAndCacheUtils.DEFAULT_MAX_RETRY; |
| 42 | +import static io.javaoperatorsdk.operator.api.reconciler.PrimaryUpdateAndCacheUtils.compareResourceVersions; |
40 | 43 | import static org.assertj.core.api.Assertions.assertThat; |
41 | 44 | import static org.junit.jupiter.api.Assertions.assertThrows; |
42 | 45 | import static org.mockito.ArgumentMatchers.any; |
|
47 | 50 |
|
48 | 51 | class PrimaryUpdateAndCacheUtilsTest { |
49 | 52 |
|
| 53 | + private static final Logger log = LoggerFactory.getLogger(PrimaryUpdateAndCacheUtilsTest.class); |
| 54 | + |
50 | 55 | Context<TestCustomResource> context = mock(Context.class); |
51 | 56 | KubernetesClient client = mock(KubernetesClient.class); |
52 | 57 | Resource resource = mock(Resource.class); |
@@ -176,4 +181,52 @@ void cachePollTimeouts() { |
176 | 181 | 10L)); |
177 | 182 | assertThat(ex.getMessage()).contains("Timeout"); |
178 | 183 | } |
| 184 | + |
| 185 | + @Test |
| 186 | + public void compareResourceVersionsTest() { |
| 187 | + assertThat(compareResourceVersions("11", "22")).isNegative(); |
| 188 | + assertThat(compareResourceVersions("22", "11")).isPositive(); |
| 189 | + assertThat(compareResourceVersions("1", "1")).isZero(); |
| 190 | + assertThat(compareResourceVersions("11", "11")).isZero(); |
| 191 | + assertThat(compareResourceVersions("123", "2")).isPositive(); |
| 192 | + assertThat(compareResourceVersions("3", "211")).isNegative(); |
| 193 | + |
| 194 | + assertThrows( |
| 195 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("aa", "22")); |
| 196 | + assertThrows( |
| 197 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("11", "ba")); |
| 198 | + assertThrows( |
| 199 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("", "22")); |
| 200 | + assertThrows( |
| 201 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("11", "")); |
| 202 | + assertThrows( |
| 203 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("01", "123")); |
| 204 | + assertThrows( |
| 205 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("123", "01")); |
| 206 | + assertThrows( |
| 207 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("3213", "123a")); |
| 208 | + assertThrows( |
| 209 | + NonComparableResourceVersionException.class, () -> compareResourceVersions("321", "123a")); |
| 210 | + } |
| 211 | + |
| 212 | + // naive performance test that compares the work case scenario for the parsing and non-parsing |
| 213 | + // variants |
| 214 | + @Test |
| 215 | + public void compareResourcePerformanceTest() { |
| 216 | + var execNum = 30000000; |
| 217 | + var startTime = System.currentTimeMillis(); |
| 218 | + for (int i = 0; i < execNum; i++) { |
| 219 | + var res = compareResourceVersions("123456788", "123456789"); |
| 220 | + } |
| 221 | + var dur1 = System.currentTimeMillis() - startTime; |
| 222 | + log.info("Duration without parsing: {}", dur1); |
| 223 | + startTime = System.currentTimeMillis(); |
| 224 | + for (int i = 0; i < execNum; i++) { |
| 225 | + var res = Long.parseLong("123456788") > Long.parseLong("123456789"); |
| 226 | + } |
| 227 | + var dur2 = System.currentTimeMillis() - startTime; |
| 228 | + log.info("Duration with parsing: {}", dur2); |
| 229 | + |
| 230 | + assertThat(dur1).isLessThan(dur2); |
| 231 | + } |
179 | 232 | } |
0 commit comments