From 5a9ec3d07d83d29cc3de8b2340175930e80fbf45 Mon Sep 17 00:00:00 2001 From: Ivan Danyliuk Date: Fri, 16 Nov 2018 14:11:47 +0100 Subject: [PATCH] Add test setup --- cmd/txqr-tester/app/session.go | 53 +++++++++++++++++++++++++++++ cmd/txqr-tester/app/session_test.go | 12 +++++++ cmd/txqr-tester/app/ws.go | 6 ++-- 3 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 cmd/txqr-tester/app/session_test.go diff --git a/cmd/txqr-tester/app/session.go b/cmd/txqr-tester/app/session.go index 88b3748..ff905ee 100644 --- a/cmd/txqr-tester/app/session.go +++ b/cmd/txqr-tester/app/session.go @@ -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 diff --git a/cmd/txqr-tester/app/session_test.go b/cmd/txqr-tester/app/session_test.go new file mode 100644 index 0000000..95d69b5 --- /dev/null +++ b/cmd/txqr-tester/app/session_test.go @@ -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) + } +} diff --git a/cmd/txqr-tester/app/ws.go b/cmd/txqr-tester/app/ws.go index 72be083..772e2e6 100644 --- a/cmd/txqr-tester/app/ws.go +++ b/cmd/txqr-tester/app/ws.go @@ -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")