feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
88
internal/webapp/logbuffer_test.go
Обычный файл
88
internal/webapp/logbuffer_test.go
Обычный файл
@@ -0,0 +1,88 @@
|
||||
package webapp
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestLogBufferAppendTail(t *testing.T) {
|
||||
buf := NewLogBuffer(5)
|
||||
for i := 0; i < 12; i++ {
|
||||
buf.Append("line " + itoa(i))
|
||||
}
|
||||
// capacity 5, should hold the last 5 lines: 7..11
|
||||
got := buf.Tail(5)
|
||||
require.Len(t, got, 5)
|
||||
assert.Equal(t, "line 7", got[0])
|
||||
assert.Equal(t, "line 11", got[4])
|
||||
assert.Equal(t, 5, buf.Cap())
|
||||
assert.Equal(t, 5, buf.Size())
|
||||
}
|
||||
|
||||
func TestLogBufferTailSmall(t *testing.T) {
|
||||
buf := NewLogBuffer(100)
|
||||
for i := 0; i < 3; i++ {
|
||||
buf.Append("x" + itoa(i))
|
||||
}
|
||||
got := buf.Tail(2)
|
||||
require.Len(t, got, 2)
|
||||
assert.Equal(t, "x1", got[0])
|
||||
assert.Equal(t, "x2", got[1])
|
||||
}
|
||||
|
||||
func TestLogBufferTailEmpty(t *testing.T) {
|
||||
buf := NewLogBuffer(10)
|
||||
assert.Nil(t, buf.Tail(5))
|
||||
assert.Equal(t, 0, buf.Size())
|
||||
}
|
||||
|
||||
func TestLogBufferTailZero(t *testing.T) {
|
||||
buf := NewLogBuffer(10)
|
||||
buf.Append("hello")
|
||||
assert.Nil(t, buf.Tail(0))
|
||||
}
|
||||
|
||||
func TestLogBufferAppendStripsNewline(t *testing.T) {
|
||||
buf := NewLogBuffer(10)
|
||||
buf.Append("hello\n")
|
||||
got := buf.Tail(1)
|
||||
require.Len(t, got, 1)
|
||||
assert.Equal(t, "hello", got[0])
|
||||
}
|
||||
|
||||
func TestFormatBytes(t *testing.T) {
|
||||
assert.Equal(t, "0 B", fmtBytes(0))
|
||||
assert.Equal(t, "1023 B", fmtBytes(1023))
|
||||
assert.Equal(t, "1.00 KiB", fmtBytes(1024))
|
||||
assert.Equal(t, "1.50 KiB", fmtBytes(1536))
|
||||
assert.Equal(t, "1.00 MiB", fmtBytes(1024*1024))
|
||||
assert.Equal(t, "4.00 GiB", fmtBytes(4*1024*1024*1024))
|
||||
}
|
||||
|
||||
func TestFormatPercent(t *testing.T) {
|
||||
assert.Equal(t, "0.00%", fmtPercent(0))
|
||||
assert.Equal(t, "50.00%", fmtPercent(50))
|
||||
assert.Equal(t, "100.00%", fmtPercent(100))
|
||||
}
|
||||
|
||||
func TestFormatDuration(t *testing.T) {
|
||||
assert.Equal(t, "0s", fmtDuration(0))
|
||||
assert.Equal(t, "59s", fmtDuration(59*1_000_000_000))
|
||||
assert.Equal(t, "1m 0s", fmtDuration(60*1_000_000_000))
|
||||
assert.Equal(t, "1h 0m 0s", fmtDuration(60*60*1_000_000_000))
|
||||
assert.Equal(t, "1d 0h 0m 0s", fmtDuration(24*60*60*1_000_000_000))
|
||||
assert.Equal(t, "2d 3h 4m 5s", fmtDuration((2*24+3)*3600*1_000_000_000+(4*60+5)*1_000_000_000))
|
||||
}
|
||||
|
||||
func TestParseTail(t *testing.T) {
|
||||
assert.Equal(t, 200, parseTail(""))
|
||||
assert.Equal(t, 200, parseTail("garbage"))
|
||||
assert.Equal(t, 200, parseTail("199")) // not in the allowed set
|
||||
assert.Equal(t, 200, parseTail("200"))
|
||||
assert.Equal(t, 500, parseTail("500"))
|
||||
assert.Equal(t, 1000, parseTail("1000"))
|
||||
assert.Equal(t, 5000, parseTail("5000"))
|
||||
assert.Equal(t, 200, parseTail("5001"))
|
||||
}
|
||||
Ссылка в новой задаче
Block a user