package revid import ( "fmt" "os" "runtime" "testing" "bitbucket.org/ausocean/iot/pi/netsender" ) const raspividPath = "/usr/local/bin/raspivid" // Suppress all test logging, except for t.Errorf output. var silent bool // TestRaspivid tests that raspivid starts correctly. // It is intended to be run on a Raspberry Pi. func TestRaspivid(t *testing.T) { if _, err := os.Stat(raspividPath); os.IsNotExist(err) { t.Skip("Skipping TestRaspivid since no raspivid found.") } var logger testLogger ns, err := netsender.New(&logger, nil, nil, nil) if err != nil { t.Errorf("netsender.New failed with error %v", err) } var c Config c.Logger = &logger c.Input = Raspivid c.Outputs = make([]uint8, 1) rv, err := New(c, ns) if err != nil { t.Errorf("revid.New failed with error %v", err) } err = rv.Start() if err != nil { t.Errorf("revid.Start failed with error %v", err) } } // testLogger implements a netsender.Logger. type testLogger struct{} // SetLevel normally sets the logging level, but it is a no-op in our case. func (tl *testLogger) SetLevel(level int8) { } // Log requests the Logger to write a message at the given level. func (tl *testLogger) Log(level int8, msg string, params ...interface{}) { logLevels := [...]string{"Debug", "Info", "Warn", "Error", "", "", "Fatal"} if level < -1 || level > 5 { panic("Invalid log level") } if !silent { fmt.Printf("%s: %s\n", logLevels[level+1], msg) } if level == 5 { buf := make([]byte, 1<<16) size := runtime.Stack(buf, true) fmt.Printf("%s\n", string(buf[:size])) os.Exit(1) } }