2022-08-28 21:41:58 +02:00
|
|
|
package measurexlite
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"sync"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/model/mocks"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestNewOperationLogger(t *testing.T) {
|
|
|
|
t.Run("for short operation and no error", func(t *testing.T) {
|
|
|
|
var (
|
|
|
|
lines []string
|
|
|
|
mu sync.Mutex
|
|
|
|
)
|
|
|
|
logger := &mocks.Logger{
|
|
|
|
MockInfof: func(format string, v ...interface{}) {
|
|
|
|
line := fmt.Sprintf(format, v...)
|
|
|
|
mu.Lock()
|
|
|
|
lines = append(lines, line)
|
|
|
|
mu.Unlock()
|
|
|
|
},
|
|
|
|
}
|
|
|
|
ol := NewOperationLogger(logger, "antani%d", 0)
|
|
|
|
ol.Stop(nil)
|
|
|
|
if len(lines) != 1 {
|
|
|
|
t.Fatal("unexpected number of lines")
|
|
|
|
}
|
|
|
|
if lines[0] != "antani0... ok" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("for short operation and error", func(t *testing.T) {
|
|
|
|
var (
|
|
|
|
lines []string
|
|
|
|
mu sync.Mutex
|
|
|
|
)
|
|
|
|
logger := &mocks.Logger{
|
|
|
|
MockInfof: func(format string, v ...interface{}) {
|
|
|
|
line := fmt.Sprintf(format, v...)
|
|
|
|
mu.Lock()
|
|
|
|
lines = append(lines, line)
|
|
|
|
mu.Unlock()
|
|
|
|
},
|
|
|
|
}
|
|
|
|
ol := NewOperationLogger(logger, "antani%d", 0)
|
|
|
|
ol.Stop(io.EOF)
|
|
|
|
if len(lines) != 1 {
|
|
|
|
t.Fatal("unexpected number of lines")
|
|
|
|
}
|
|
|
|
if lines[0] != "antani0... EOF" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("for longer operation and no error", func(t *testing.T) {
|
|
|
|
var (
|
|
|
|
lines []string
|
|
|
|
mu sync.Mutex
|
|
|
|
)
|
|
|
|
logger := &mocks.Logger{
|
|
|
|
MockInfof: func(format string, v ...interface{}) {
|
|
|
|
line := fmt.Sprintf(format, v...)
|
|
|
|
mu.Lock()
|
|
|
|
lines = append(lines, line)
|
|
|
|
mu.Unlock()
|
|
|
|
},
|
|
|
|
}
|
|
|
|
const maxwait = 100 * time.Microsecond
|
|
|
|
ol := newOperationLogger(maxwait, logger, "antani%d", 0)
|
2022-08-28 23:54:22 +02:00
|
|
|
ol.wg.Wait() // wait for the message to be emitted
|
2022-08-28 21:41:58 +02:00
|
|
|
ol.Stop(nil)
|
|
|
|
if len(lines) != 2 {
|
|
|
|
t.Fatal("unexpected number of lines")
|
|
|
|
}
|
|
|
|
if lines[0] != "antani0... in progress" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
if lines[1] != "antani0... ok" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("for longer operation and error", func(t *testing.T) {
|
|
|
|
var (
|
|
|
|
lines []string
|
|
|
|
mu sync.Mutex
|
|
|
|
)
|
|
|
|
logger := &mocks.Logger{
|
|
|
|
MockInfof: func(format string, v ...interface{}) {
|
|
|
|
line := fmt.Sprintf(format, v...)
|
|
|
|
mu.Lock()
|
|
|
|
lines = append(lines, line)
|
|
|
|
mu.Unlock()
|
|
|
|
},
|
|
|
|
}
|
|
|
|
const maxwait = 100 * time.Microsecond
|
|
|
|
ol := newOperationLogger(maxwait, logger, "antani%d", 0)
|
2022-08-28 23:54:22 +02:00
|
|
|
ol.wg.Wait() // wait for the message to be emitted
|
2022-08-28 21:41:58 +02:00
|
|
|
ol.Stop(io.EOF)
|
|
|
|
if len(lines) != 2 {
|
|
|
|
t.Fatal("unexpected number of lines")
|
|
|
|
}
|
|
|
|
if lines[0] != "antani0... in progress" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
if lines[1] != "antani0... EOF" {
|
|
|
|
t.Fatal("unexpected first line", lines[0])
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|