Move ChannelReceivesSomething to tests package.
ChannelReceivesSomething (formerly WaitForChannel) originally was located in the helpers package. This move was done to remove a cyclic dependency with the nomand package.
This commit is contained in:
@ -310,20 +310,20 @@ func TestRawToCodeOceanWriter(t *testing.T) {
|
||||
func TestCodeOceanToRawReaderReturnsOnlyAfterOneByteWasRead(t *testing.T) {
|
||||
reader := newCodeOceanToRawReader(nil)
|
||||
|
||||
read := make(chan int)
|
||||
read := make(chan bool)
|
||||
go func() {
|
||||
p := make([]byte, 10)
|
||||
n, _ := reader.Read(p)
|
||||
read <- n
|
||||
_, _ = reader.Read(p)
|
||||
read <- true
|
||||
}()
|
||||
|
||||
t.Run("Does not return immediately when there is no data", func(t *testing.T) {
|
||||
assert.False(t, waitForChannel(read, tests.ShortTimeout))
|
||||
assert.False(t, tests.ChannelReceivesSomething(read, tests.ShortTimeout))
|
||||
})
|
||||
|
||||
t.Run("Returns when there is data available", func(t *testing.T) {
|
||||
reader.buffer <- byte(42)
|
||||
assert.True(t, waitForChannel(read, tests.ShortTimeout))
|
||||
assert.True(t, tests.ChannelReceivesSomething(read, tests.ShortTimeout))
|
||||
})
|
||||
}
|
||||
|
||||
@ -343,34 +343,25 @@ func TestCodeOceanToRawReaderReturnsOnlyAfterOneByteWasReadFromConnection(t *tes
|
||||
cancel := reader.readInputLoop()
|
||||
defer cancel()
|
||||
|
||||
read := make(chan int)
|
||||
read := make(chan bool)
|
||||
message := make([]byte, 10)
|
||||
go func() {
|
||||
n, _ := reader.Read(message)
|
||||
read <- n
|
||||
_, _ = reader.Read(message)
|
||||
read <- true
|
||||
}()
|
||||
|
||||
t.Run("Does not return immediately when there is no data", func(t *testing.T) {
|
||||
assert.False(t, waitForChannel(read, tests.ShortTimeout))
|
||||
assert.False(t, tests.ChannelReceivesSomething(read, tests.ShortTimeout))
|
||||
})
|
||||
|
||||
t.Run("Returns when there is data available", func(t *testing.T) {
|
||||
messages <- strings.NewReader("Hello")
|
||||
assert.True(t, waitForChannel(read, tests.ShortTimeout))
|
||||
assert.True(t, tests.ChannelReceivesSomething(read, tests.ShortTimeout))
|
||||
})
|
||||
}
|
||||
|
||||
// --- Test suite specific test helpers ---
|
||||
|
||||
func waitForChannel(ch chan int, duration time.Duration) bool {
|
||||
select {
|
||||
case <-ch:
|
||||
return true
|
||||
case <-time.After(duration):
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func newNomadAllocationWithMockedApiClient(runnerId string) (r runner.Runner, mock *nomad.ExecutorAPIMock) {
|
||||
mock = &nomad.ExecutorAPIMock{}
|
||||
r = runner.NewNomadJob(runnerId, mock)
|
||||
|
@ -759,10 +759,5 @@ func TestNullReaderDoesNotReturnImmediately(t *testing.T) {
|
||||
_, _ = reader.Read(p)
|
||||
close(readerReturned)
|
||||
}()
|
||||
|
||||
select {
|
||||
case <-readerReturned:
|
||||
t.Fatal("Read should not return immediately.")
|
||||
case <-time.After(tests.ShortTimeout):
|
||||
}
|
||||
assert.False(t, tests.ChannelReceivesSomething(readerReturned, tests.ShortTimeout))
|
||||
}
|
||||
|
14
tests/util.go
Normal file
14
tests/util.go
Normal file
@ -0,0 +1,14 @@
|
||||
package tests
|
||||
|
||||
import "time"
|
||||
|
||||
// ChannelReceivesSomething waits timeout seconds for something to be received from channel ch.
|
||||
// If something is received, it returns true. If the timeout expires without receiving anything, it return false.
|
||||
func ChannelReceivesSomething(ch chan bool, timeout time.Duration) bool {
|
||||
select {
|
||||
case <-ch:
|
||||
return true
|
||||
case <-time.After(timeout):
|
||||
return false
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user