@@ -274,6 +274,88 @@ func TestManager_UpdateBroker_AnnotationUpdated(t *testing.T) {
274274 }
275275}
276276
277+ func TestManager_UpdateBroker_SteadyStateDoesNotWrite (t * testing.T ) {
278+ existingCM := contractConfigMap (& Contract {Brokers : make (map [string ]BrokerContract )})
279+ client := fake .NewClientset (existingCM )
280+ manager := & Manager {
281+ client : client ,
282+ lister : newFakeConfigMapLister (),
283+ namespace : testSystemNamespace ,
284+ }
285+ broker := BrokerContract {
286+ UID : "uid-1" , Namespace : "ns" , Name : "br" , StreamName : "stream-1" ,
287+ PublishSubject : "broker.ns.br" , Path : "/ns/br" , Generation : 4 ,
288+ }
289+ countWrites := func () int {
290+ writes := 0
291+ for _ , action := range client .Actions () {
292+ if action .GetResource ().Resource == "configmaps" &&
293+ (action .GetVerb () == "create" || action .GetVerb () == "update" ) {
294+ writes ++
295+ }
296+ }
297+ return writes
298+ }
299+ getContract := func () * Contract {
300+ t .Helper ()
301+ cm , err := client .CoreV1 ().ConfigMaps (testSystemNamespace ).Get (
302+ context .Background (), ConfigMapName , metav1.GetOptions {},
303+ )
304+ if err != nil {
305+ t .Fatal (err )
306+ }
307+ contract , err := ParseContract (cm )
308+ if err != nil {
309+ t .Fatal (err )
310+ }
311+ return contract
312+ }
313+
314+ wrote , err := manager .UpdateBrokerIfChanged (context .Background (), broker )
315+ if err != nil {
316+ t .Fatal (err )
317+ }
318+ if ! wrote {
319+ t .Fatal ("initial UpdateBrokerIfChanged() changed = false, want true" )
320+ }
321+ if got := getContract ().Generation ; got != 1 {
322+ t .Fatalf ("Generation after initial UpdateBroker() = %d, want 1" , got )
323+ }
324+ if got := countWrites (); got != 1 {
325+ t .Fatalf ("ConfigMap writes after initial UpdateBroker() = %d, want 1" , got )
326+ }
327+
328+ wrote , err = manager .UpdateBrokerIfChanged (context .Background (), broker )
329+ if err != nil {
330+ t .Fatal (err )
331+ }
332+ if wrote {
333+ t .Fatal ("identical UpdateBrokerIfChanged() changed = true, want false" )
334+ }
335+ if got := getContract ().Generation ; got != 1 {
336+ t .Fatalf ("Generation after identical UpdateBroker() = %d, want unchanged 1" , got )
337+ }
338+ if got := countWrites (); got != 1 {
339+ t .Fatalf ("ConfigMap writes after identical UpdateBroker() = %d, want unchanged 1" , got )
340+ }
341+
342+ changedContract := broker
343+ changedContract .PublishSubject = "broker.ns.br.changed"
344+ wrote , err = manager .UpdateBrokerIfChanged (context .Background (), changedContract )
345+ if err != nil {
346+ t .Fatal (err )
347+ }
348+ if ! wrote {
349+ t .Fatal ("changed UpdateBrokerIfChanged() changed = false, want true" )
350+ }
351+ if got := getContract ().Generation ; got != 2 {
352+ t .Fatalf ("Generation after changed UpdateBroker() = %d, want 2" , got )
353+ }
354+ if got := countWrites (); got != 2 {
355+ t .Fatalf ("ConfigMap writes after changed UpdateBroker() = %d, want 2" , got )
356+ }
357+ }
358+
277359// --- DeleteBroker tests ---
278360
279361func TestManager_DeleteBroker_ConfigMapNotFound (t * testing.T ) {
0 commit comments