Add test setup

This commit is contained in:
Ivan Danyliuk
2018-11-16 14:11:47 +01:00
parent 979ff2847f
commit 5a9ec3d07d
3 changed files with 69 additions and 2 deletions
+53
View File
@@ -18,6 +18,9 @@ const (
type Session struct {
state SessionState
config SessionConfig
tests []*testSetup
idx int // current test index
}
// NewSession inits new test session.
@@ -28,6 +31,56 @@ func NewSession() *Session {
}
}
// StartNext starts next round of testing. It returns
// next untested parameters for QR code.
func (s *Session) StartNext() (*testSetup, bool) {
if s.state == StateNew {
s.state = StateStarted
// generate parameters set, so they can't be changed during test
s.tests = s.generateTestsSetup()
}
if s.idx == len(s.tests) {
s.state = StateFinished
return nil, false
}
test := s.tests[s.idx]
s.idx++
return test, true
}
func (s *Session) generateTestsSetup() []*testSetup {
var ret []*testSetup
for _, lvl := range AllQRLevels {
if s.config.Levels[lvl] == false {
continue
}
for fps := s.config.StartFPS; fps < s.config.StopFPS; fps++ {
for sz := s.config.StartSize; sz < s.config.StopSize; sz += s.config.SizeStep {
ret = append(ret, newTestSetup(fps, sz, lvl))
}
}
}
return ret
}
// testSetup represents setup parameters for the single test round.
type testSetup struct {
FPS int
Size int
Level qr.RecoveryLevel
}
func newTestSetup(fps, sz int, lvl qr.RecoveryLevel) *testSetup {
return &testSetup{
FPS: fps,
Size: sz,
Level: lvl,
}
}
// SessionConfig holds configuration values for initiating the session.
type SessionConfig struct {
StartFPS, StopFPS int // FPS of QR animation
+12
View File
@@ -0,0 +1,12 @@
package main
import "testing"
func TestGenerateTests(t *testing.T) {
sess := NewSession()
got := sess.generateTestsSetup()
expectedLen := 988
if len(got) != expectedLen {
t.Fatalf("Expected len to be %d, but got %d", expectedLen, got)
}
}
+4 -2
View File
@@ -42,7 +42,7 @@ func (w *WSClient) talkToBackend() {
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
log.Println("[ERROR] Reading from websocket: %v", err)
log.Printf("[ERROR] Reading from websocket: %v", err)
break
}
@@ -65,7 +65,9 @@ func (w *WSClient) processWSCommand(data []byte) {
w.app.SetConnected(true)
w.sendMsg(&ws.UIResponse{Type: ws.Ack})
case ws.CmdStartNext:
log.Println("Got start_next")
log.Println("Got start_nextx")
setup, _ := w.app.session.StartNext()
log.Println("Config:", setup)
// start animation
case ws.CmdResult:
log.Println("Got result")