From 958678bdb61aa0bb11992e94070742f56f6ebbc8 Mon Sep 17 00:00:00 2001 From: Laura Date: Wed, 20 Nov 2024 16:57:09 -0500 Subject: [PATCH] Fix service test. Add mocks for checking service --- hosting/hooks_for_test.go | 87 +++++++++++++++++++++++++++++++++++++++ hosting/service_test.go | 11 ++--- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/hosting/hooks_for_test.go b/hosting/hooks_for_test.go index b233a82c..07fe5d4b 100644 --- a/hosting/hooks_for_test.go +++ b/hosting/hooks_for_test.go @@ -1,8 +1,12 @@ package hosting import ( + "bytes" "errors" + "fmt" + "net" "testing" + "time" . "gopkg.in/check.v1" ) @@ -19,3 +23,86 @@ func noErrHelper() error { func errHelper() error { return errors.New("error2") } + +func mockCheckService() *checkService { + listener := newMockListener() + conn := newMockConn() + + listener.connChan <- conn + + return &checkService{ + l: listener, + conn: conn, + port: 12345, + } +} + +type mockListener struct { + connChan chan net.Conn +} + +func newMockListener() *mockListener { + return &mockListener{ + connChan: make(chan net.Conn, 1), + } +} + +func (m *mockListener) Accept() (net.Conn, error) { + conn, ok := <-m.connChan + if !ok { + return nil, fmt.Errorf("mock listener closed") + } + return conn, nil +} + +func (m *mockListener) Close() error { + close(m.connChan) + return nil +} + +func (m *mockListener) Addr() net.Addr { + return &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 12345} +} + +type mockConn struct { + readBuffer *bytes.Buffer + writeBuffer *bytes.Buffer +} + +func newMockConn() *mockConn { + return &mockConn{ + readBuffer: &bytes.Buffer{}, + writeBuffer: &bytes.Buffer{}, + } +} + +func (m *mockConn) Read(b []byte) (n int, err error) { + return m.readBuffer.Read(b) +} + +func (m *mockConn) Write(b []byte) (n int, err error) { + return m.writeBuffer.Write(b) +} + +func (m *mockConn) Close() error { + return nil +} + +func (m *mockConn) LocalAddr() net.Addr { + return &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0} +} +func (m *mockConn) RemoteAddr() net.Addr { + return &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0} +} + +func (m *mockConn) SetDeadline(t time.Time) error { + return nil +} + +func (m *mockConn) SetReadDeadline(t time.Time) error { + return nil +} + +func (m *mockConn) SetWriteDeadline(t time.Time) error { + return nil +} diff --git a/hosting/service_test.go b/hosting/service_test.go index 4fe7d171..4f92043d 100644 --- a/hosting/service_test.go +++ b/hosting/service_test.go @@ -117,7 +117,7 @@ func (h *hostingSuite) Test_NewService_returnsAnErrorWhenWrongPortIsGiven(c *C) c.Assert(srvc, IsNil) } -func (s *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsCreatingServer(c *C) { +func (h *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsCreatingServer(c *C) { path := "/tmp/wahay/" sID := 2 servers := &servers{ @@ -135,7 +135,7 @@ func (s *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsCreatingSer c.Assert(err, ErrorMatches, expectedError) } -func (s *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsStartingServer(c *C) { +func (h *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsStartingServer(c *C) { path := "/tmp/wahay/" var perm fs.FileMode = 0700 @@ -161,7 +161,7 @@ func (s *hostingSuite) Test_NewConferenceRoom_returnsAnErrorWhenFailsStartingSer c.Assert(err, ErrorMatches, expectedError) } -func (s *hostingSuite) Test_NewConferenceRoom_returnsNilWhenSuccessfullyCreatesANewConferenceRoom(c *C) { +func (h *hostingSuite) Test_NewConferenceRoom_returnsNilWhenSuccessfullyCreatesANewConferenceRoom(c *C) { servers := &servers{ nextID: 2, } @@ -185,6 +185,7 @@ func (s *hostingSuite) Test_NewConferenceRoom_returnsNilWhenSuccessfullyCreatesA server: &http.Server{}, address: "127.0.0.1:5545", }, + checkServer: mockCheckService(), } sud := SuperUserData{} err := srvc.NewConferenceRoom("", sud) @@ -192,7 +193,7 @@ func (s *hostingSuite) Test_NewConferenceRoom_returnsNilWhenSuccessfullyCreatesA c.Assert(err, IsNil) } -func (s *hostingSuite) Test_Close_returnsErrorNilWhenHttpServerRoomAndOnionAreAlreadyEmpty(c *C) { +func (h *hostingSuite) Test_Close_returnsErrorNilWhenHttpServerRoomAndOnionAreAlreadyEmpty(c *C) { srvc := &service{ collection: &servers{ dataDir: "tmp/wahay", @@ -202,7 +203,7 @@ func (s *hostingSuite) Test_Close_returnsErrorNilWhenHttpServerRoomAndOnionAreAl c.Assert(err, IsNil) } -func (s *hostingSuite) Test_Close_returnsAnErrorWhenFailsClosingRoom(c *C) { +func (h *hostingSuite) Test_Close_returnsAnErrorWhenFailsClosingRoom(c *C) { srvc := &service{ room: &conferenceRoom{ server: &server{