package api import ( "errors" "io" "strings" "testing" ) func TestSseLesen(t *testing.T) { strom := ": ping\r\n\r\nid: 41\r\nevent: log\r\ndata: [1,\r\ndata: 2]\r\n\r\nevent: stand\ndata: {}\n\n: ping\n\nevent: ende\ndata: {}\n\n" var gesehen []Ereignis err := sseLesen(strings.NewReader(strom), func(e Ereignis) error { gesehen = append(gesehen, e) if e.Art == "ende" { return Ende } return nil }) if !errors.Is(err, Ende) { t.Fatalf("Fehler %v", err) } if len(gesehen) != 3 || gesehen[0].ID != "41" || string(gesehen[0].Daten) != "[1,\n2]" || gesehen[1].Art != "stand" { t.Errorf("gelesen: %+v", gesehen) } // Bricht der Strom vor `ende` ab, merkt der Aufrufer es (und verbindet neu). err = sseLesen(strings.NewReader("event: stand\ndata: {}\n\n"), func(Ereignis) error { return nil }) if !errors.Is(err, io.ErrUnexpectedEOF) { t.Errorf("Abbruch: %v", err) } }