mirror of
https://github.com/Icinga/icingadb.git
synced 2026-04-15 14:29:48 -04:00
This commit simplifies the `icingaDbOutputStage` type to contain only one entity slice to be insert/upsert. This allows to simplify the handling in `migrateOneType()` by removing nested loops. Additionally, a bit of code inside that function is outsourced into a new `utils.ChanFromSlice()` function. This makes the body of the loop over the insert/upsert operation (the loop using the `op` variable) simple enough so that it can just be unrolled which saves the inline struct and slice definition for that loop.
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func TestChanFromSlice(t *testing.T) {
|
|
t.Run("Nil", func(t *testing.T) {
|
|
ch := ChanFromSlice[int](nil)
|
|
require.NotNil(t, ch)
|
|
requireClosedEmpty(t, ch)
|
|
})
|
|
|
|
t.Run("Empty", func(t *testing.T) {
|
|
ch := ChanFromSlice([]int{})
|
|
require.NotNil(t, ch)
|
|
requireClosedEmpty(t, ch)
|
|
})
|
|
|
|
t.Run("NonEmpty", func(t *testing.T) {
|
|
ch := ChanFromSlice([]int{42, 23, 1337})
|
|
require.NotNil(t, ch)
|
|
requireReceive(t, ch, 42)
|
|
requireReceive(t, ch, 23)
|
|
requireReceive(t, ch, 1337)
|
|
requireClosedEmpty(t, ch)
|
|
})
|
|
}
|
|
|
|
// requireReceive is a helper function to check if a value can immediately be received from a channel.
|
|
func requireReceive(t *testing.T, ch <-chan int, expected int) {
|
|
t.Helper()
|
|
|
|
select {
|
|
case v, ok := <-ch:
|
|
require.True(t, ok, "receiving should return a value")
|
|
require.Equal(t, expected, v)
|
|
default:
|
|
require.Fail(t, "receiving should not block")
|
|
}
|
|
}
|
|
|
|
// requireReceive is a helper function to check if the channel is closed and empty.
|
|
func requireClosedEmpty(t *testing.T, ch <-chan int) {
|
|
t.Helper()
|
|
|
|
select {
|
|
case _, ok := <-ch:
|
|
require.False(t, ok, "receiving from channel should not return anything")
|
|
default:
|
|
require.Fail(t, "receiving should not block")
|
|
}
|
|
}
|