@@ -3,6 +3,7 @@ package fsm
33import (
44 "context"
55 "log/slog"
6+ "os"
67 "testing"
78 "time"
89
@@ -13,7 +14,8 @@ import (
1314func TestHandleProvisioningEvent (t * testing.T ) {
1415 now := time .Now ()
1516 lastEventTime := now .Add (- time .Minute * 4 )
16- exceedThresholdTime := now .Add (- time .Minute * 10 )
17+ exceedReclaimThresholdTime := now .Add (- time .Minute * 10 )
18+ exceedBufferedPhonedHomeThreshold := now .Add (- time .Minute * 10 )
1719 tests := []struct {
1820 event * metal.ProvisioningEvent
1921 container * metal.ProvisioningEventContainer
@@ -427,12 +429,12 @@ func TestHandleProvisioningEvent(t *testing.T) {
427429 container : & metal.ProvisioningEventContainer {
428430 Events : metal.ProvisioningEvents {
429431 {
430- Time : exceedThresholdTime ,
432+ Time : exceedReclaimThresholdTime ,
431433 Event : metal .ProvisioningEventMachineReclaim ,
432434 },
433435 },
434436 Liveliness : metal .MachineLivelinessAlive ,
435- LastEventTime : & exceedThresholdTime ,
437+ LastEventTime : & exceedReclaimThresholdTime ,
436438 },
437439 event : & metal.ProvisioningEvent {
438440 Time : now ,
@@ -446,7 +448,7 @@ func TestHandleProvisioningEvent(t *testing.T) {
446448 LastEventTime : & now ,
447449 Events : metal.ProvisioningEvents {
448450 {
449- Time : exceedThresholdTime ,
451+ Time : exceedReclaimThresholdTime ,
450452 Event : metal .ProvisioningEventMachineReclaim ,
451453 },
452454 },
@@ -626,12 +628,69 @@ func TestHandleProvisioningEvent(t *testing.T) {
626628 },
627629 },
628630 },
631+ {
632+ name : "swallow delayed buffered phoned home event" ,
633+ container : & metal.ProvisioningEventContainer {
634+ Events : metal.ProvisioningEvents {
635+ {
636+ Time : lastEventTime ,
637+ Event : metal .ProvisioningEventWaiting ,
638+ },
639+ },
640+ Liveliness : metal .MachineLivelinessAlive ,
641+ LastEventTime : & lastEventTime ,
642+ },
643+ event : & metal.ProvisioningEvent {
644+ Time : now ,
645+ Event : metal .ProvisioningEventPhonedHome ,
646+ },
647+ want : & metal.ProvisioningEventContainer {
648+ Liveliness : metal .MachineLivelinessAlive ,
649+ LastEventTime : & lastEventTime ,
650+ Events : metal.ProvisioningEvents {
651+ {
652+ Time : lastEventTime ,
653+ Event : metal .ProvisioningEventWaiting ,
654+ },
655+ },
656+ },
657+ },
658+ {
659+ name : "buffered phoned home event threshold exceeded" ,
660+ container : & metal.ProvisioningEventContainer {
661+ Events : metal.ProvisioningEvents {
662+ {
663+ Time : exceedBufferedPhonedHomeThreshold ,
664+ Event : metal .ProvisioningEventWaiting ,
665+ },
666+ },
667+ Liveliness : metal .MachineLivelinessAlive ,
668+ },
669+ event : & metal.ProvisioningEvent {
670+ Time : now ,
671+ Event : metal .ProvisioningEventPhonedHome ,
672+ },
673+ want : & metal.ProvisioningEventContainer {
674+ Liveliness : metal .MachineLivelinessAlive ,
675+ LastEventTime : & now ,
676+ Events : metal.ProvisioningEvents {
677+ {
678+ Time : now ,
679+ Event : metal .ProvisioningEventPhonedHome ,
680+ },
681+ {
682+ Time : exceedBufferedPhonedHomeThreshold ,
683+ Event : metal .ProvisioningEventWaiting ,
684+ },
685+ },
686+ },
687+ },
629688 }
630689 for i := range tests {
631690 ctx := context .Background ()
632691 tt := tests [i ]
633692 t .Run (tt .name , func (t * testing.T ) {
634- got , err := HandleProvisioningEvent (ctx , slog .Default ( ), tt .container , tt .event )
693+ got , err := HandleProvisioningEvent (ctx , slog .New ( slog . NewJSONHandler ( os . Stdout , & slog. HandlerOptions { Level : slog . LevelDebug }) ), tt .container , tt .event )
635694 if diff := cmp .Diff (tt .wantErr , err ); diff != "" {
636695 t .Errorf ("HandleProvisioningEvent() diff = %s" , diff )
637696 }
0 commit comments