redis/internal/proto/scan_test.go

80 lines
1.5 KiB
Go

package proto_test
import (
"context"
"encoding/json"
"errors"
"testing"
"time"
"github.com/go-redis/redis/v8"
"github.com/go-redis/redis/v8/internal/proto"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
type testScanSliceStruct struct {
ID int
Name string
}
func (s *testScanSliceStruct) MarshalBinary() ([]byte, error) {
return json.Marshal(s)
}
func (s *testScanSliceStruct) UnmarshalBinary(b []byte) error {
return json.Unmarshal(b, s)
}
var _ = Describe("ScanSlice", func() {
data := []string{
`{"ID":-1,"Name":"Back Yu"}`,
`{"ID":1,"Name":"szyhf"}`,
}
It("[]testScanSliceStruct", func() {
var slice []testScanSliceStruct
err := proto.ScanSlice(data, &slice)
Expect(err).NotTo(HaveOccurred())
Expect(slice).To(Equal([]testScanSliceStruct{
{-1, "Back Yu"},
{1, "szyhf"},
}))
})
It("var testContainer []*testScanSliceStruct", func() {
var slice []*testScanSliceStruct
err := proto.ScanSlice(data, &slice)
Expect(err).NotTo(HaveOccurred())
Expect(slice).To(Equal([]*testScanSliceStruct{
{-1, "Back Yu"},
{1, "szyhf"},
}))
})
})
func TestScan(t *testing.T) {
t.Parallel()
t.Run("time", func(t *testing.T) {
t.Parallel()
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: ":6379",
})
tm := time.Now()
rdb.Set(ctx, "now", tm, 0)
var tm2 time.Time
rdb.Get(ctx, "now").Scan(&tm2)
if !tm2.Equal(tm) {
t.Fatal(errors.New("tm2 and tm are not equal"))
}
})
}