github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/automation/run/run_test.go (about) 1 package run 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "strings" 7 "testing" 8 9 "github.com/google/go-cmp/cmp" 10 "github.com/qri-io/qri/event" 11 ) 12 13 func ExampleNewID() { 14 myString := "SomeRandomStringThatIsLong-SoYouCanCallItAsMuchAsNeeded..." 15 SetIDRand(strings.NewReader(myString)) 16 a := NewID() 17 SetIDRand(strings.NewReader(myString)) 18 b := NewID() 19 20 fmt.Printf("a: %s\nb: %s\neq: %t", a, b, a == b) 21 // Output: 22 // a: 536f6d65-5261-4e64-af6d-537472696e67 23 // b: 536f6d65-5261-4e64-af6d-537472696e67 24 // eq: true 25 } 26 27 func TestStateAddTransformEvent(t *testing.T) { 28 runID := NewID() 29 states := getStates(runID) 30 for i, s := range states { 31 t.Run(fmt.Sprintf("after_event_%d", i), func(t *testing.T) { 32 got := NewState(runID) 33 for j := 0; j <= i; j++ { 34 if err := got.AddTransformEvent(states[j].e); err != nil { 35 t.Fatal(err) 36 } 37 } 38 39 if diff := cmp.Diff(s.r, got); diff != "" { 40 t.Errorf("result mismatch. (-want +got):\n%s", diff) 41 } 42 }) 43 } 44 } 45 46 func getStates(runID string) []struct { 47 e event.Event 48 r *State 49 } { 50 states := []struct { 51 e event.Event 52 r *State 53 }{ 54 { 55 event.Event{Type: event.ETTransformStart, Timestamp: 1609460600090, SessionID: runID, Payload: event.TransformLifecycle{StepCount: 4, Status: "running"}}, 56 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning}, 57 }, 58 { 59 event.Event{Type: event.ETTransformStepStart, Timestamp: 1609460700090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "setup"}}, 60 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 61 {Name: "setup", StartTime: toTimePointer(1609460700090), Status: RSRunning}, 62 }}, 63 }, 64 // { 65 // event.Event{ Type: event.ETVersionPulled, Timestamp: 1609460800090, SessionID: runID, Payload: {"refstring": "rico/presidents@QmFoo", "remote": "https://registy.qri.cloud" }}, 66 // &State{}, 67 // }, 68 { 69 event.Event{Type: event.ETTransformStepStop, Timestamp: 1609460900090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "setup", Status: "succeeded"}}, 70 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 71 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 72 }}, 73 }, 74 { 75 event.Event{Type: event.ETTransformStepStart, Timestamp: 1609461000090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "download"}}, 76 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 77 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 78 {Name: "download", StartTime: toTimePointer(1609461000090), Status: RSRunning}, 79 }}, 80 }, 81 { 82 event.Event{Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 83 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 84 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 85 {Name: "download", StartTime: toTimePointer(1609461000090), Status: RSRunning, Output: []event.Event{ 86 {Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 87 }}, 88 }}, 89 }, 90 // { 91 // event.Event{ Type: event.ETHttpRequestStart, Timestamp: 1609461200090, SessionID: runID, Payload: {"id": runID, "downloadSize": 230409, "method": "Gevent.ET", "url": "https://registy.qri.cloud" }}, 92 // &State{}, 93 // { 94 // { 95 // event.Event{ Type: event.ETHttpRequestStop, Timestamp: 1609461300090, SessionID: runID, Payload: {"size": 230409, "method": "Gevent.ET", "url": "https://registy.qri.cloud" }}, 96 // &State{}, 97 // }, 98 { 99 event.Event{Type: event.ETTransformStepStop, Timestamp: 1609461400090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "download", Status: "succeeded"}}, 100 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 101 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 102 {Name: "download", StartTime: toTimePointer(1609461000090), StopTime: toTimePointer(1609461400090), Duration: 400000, Status: RSSucceeded, Output: []event.Event{ 103 {Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 104 }}, 105 }}, 106 }, 107 { 108 event.Event{Type: event.ETTransformStepStart, Timestamp: 1609461500090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "transform"}}, 109 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 110 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 111 {Name: "download", StartTime: toTimePointer(1609461000090), StopTime: toTimePointer(1609461400090), Duration: 400000, Status: RSSucceeded, Output: []event.Event{ 112 {Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 113 }}, 114 {Name: "transform", StartTime: toTimePointer(1609461500090), Status: RSRunning}, 115 }}, 116 }, 117 { 118 event.Event{Type: event.ETTransformStepStop, Timestamp: 1609461600090, SessionID: runID, Payload: event.TransformStepLifecycle{Name: "transform", Status: "succeeded"}}, 119 &State{ID: runID, StartTime: toTimePointer(1609460600090), Status: RSRunning, Steps: []*StepState{ 120 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 121 {Name: "download", StartTime: toTimePointer(1609461000090), StopTime: toTimePointer(1609461400090), Duration: 400000, Status: RSSucceeded, Output: []event.Event{ 122 {Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 123 }}, 124 {Name: "transform", StartTime: toTimePointer(1609461500090), StopTime: toTimePointer(1609461600090), Duration: 100000, Status: RSSucceeded}, 125 }}, 126 }, 127 { 128 event.Event{Type: event.ETTransformStop, Timestamp: 1609461900090, SessionID: runID, Payload: event.TransformLifecycle{Status: "failed"}}, 129 &State{ID: runID, StartTime: toTimePointer(1609460600090), StopTime: toTimePointer(1609461900090), Duration: 1300000, Status: RSFailed, Steps: []*StepState{ 130 {Name: "setup", StartTime: toTimePointer(1609460700090), StopTime: toTimePointer(1609460900090), Duration: 200000, Status: RSSucceeded}, 131 {Name: "download", StartTime: toTimePointer(1609461000090), StopTime: toTimePointer(1609461400090), Duration: 400000, Status: RSSucceeded, Output: []event.Event{ 132 {Type: event.ETTransformPrint, Timestamp: 1609461100090, SessionID: runID, Payload: event.TransformMessage{Msg: "oh hai there"}}, 133 }}, 134 {Name: "transform", StartTime: toTimePointer(1609461500090), StopTime: toTimePointer(1609461600090), Duration: 100000, Status: RSSucceeded}, 135 }}, 136 }, 137 } 138 return states 139 } 140 141 func TestRunStateMarshaling(t *testing.T) { 142 runID := NewID() 143 states := getStates(runID) 144 for i, s := range states { 145 t.Run(fmt.Sprintf("after_event_%d", i), func(t *testing.T) { 146 got := NewState(runID) 147 for j := 0; j <= i; j++ { 148 if err := got.AddTransformEvent(states[j].e); err != nil { 149 t.Fatal(err) 150 } 151 } 152 153 serializedRun, err := json.Marshal(got) 154 if err != nil { 155 t.Fatal(err) 156 } 157 deserializedRun := &State{} 158 err = json.Unmarshal(serializedRun, deserializedRun) 159 if err != nil { 160 t.Fatal(err) 161 } 162 163 if diff := cmp.Diff(got, deserializedRun); diff != "" { 164 t.Errorf("serialization mismatch (-want +got):\n %s", diff) 165 } 166 167 if diff := cmp.Diff(s.r, got); diff != "" { 168 t.Errorf("result mismatch. (-want +got):\n%s", diff) 169 } 170 }) 171 } 172 }