Skip to content

Commit be35e5a

Browse files
authored
Feature/Add MessagesAndPurge to server (#174)
1 parent e6ad990 commit be35e5a

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

message.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,14 @@ func (messages *messages) copyInternal() []Message {
167167

168168
return copiedMessages
169169
}
170+
171+
// Returns all messages and removes them at the same time
172+
func (messages *messages) purge() []Message {
173+
messages.Lock()
174+
defer messages.Unlock()
175+
176+
copiedMessages := messages.copyInternal()
177+
messages.items = nil
178+
179+
return copiedMessages
180+
}

message_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,3 +256,14 @@ func TestMessagesCopy(t *testing.T) {
256256
assert.Equal(t, *message, copyMessages[0])
257257
})
258258
}
259+
260+
func TestMessagesPurge(t *testing.T) {
261+
t.Run("purges messages from items slice", func(t *testing.T) {
262+
message, messages := new(Message), new(messages)
263+
messages.append(message)
264+
265+
assert.Len(t, messages.copy(), 1)
266+
assert.Len(t, messages.purge(), 1)
267+
assert.Len(t, messages.copy(), 0)
268+
})
269+
}

server.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ func (server *Server) Messages() []Message {
124124
return server.messages.copy()
125125
}
126126

127+
// Public interface to get access to server messages
128+
// and at the same time removes them
129+
func (server *Server) MessagesAndPurge() []Message {
130+
return server.messages.purge()
131+
}
132+
127133
// Thread-safe getter of server port.
128134
// Returns server.portNumber
129135
func (server *Server) PortNumber() int {

server_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,16 @@ func TestServerMessages(t *testing.T) {
163163
assert.NotSame(t, server.messages.items, server.Messages())
164164
server.messages.RUnlock()
165165
})
166+
167+
t.Run("no messages after purge", func(t *testing.T) {
168+
server := newServer(configuration)
169+
message := new(Message)
170+
server.messages.append(message)
171+
172+
assert.NotEmpty(t, server.Messages())
173+
assert.NotEmpty(t, server.MessagesAndPurge())
174+
assert.Empty(t, server.Messages())
175+
})
166176
}
167177

168178
func TestServerPortNumber(t *testing.T) {

0 commit comments

Comments
 (0)