mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-31 19:48:41 -04:00
142 lines
3.3 KiB
Go
142 lines
3.3 KiB
Go
package networkmap_pgsql
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type g1 struct {
|
|
Name sql.NullString
|
|
}
|
|
|
|
type g2 struct {
|
|
Name string
|
|
}
|
|
|
|
type g11 struct {
|
|
Name sql.NullString
|
|
PublicId sql.NullString
|
|
}
|
|
|
|
type g22 struct {
|
|
Name string
|
|
PublicId string
|
|
}
|
|
|
|
type g111 struct {
|
|
Name sql.NullString
|
|
TrueOrFalse sql.NullBool
|
|
}
|
|
|
|
type g222 struct {
|
|
Name string
|
|
TrueOrFalse bool
|
|
}
|
|
|
|
type g1111 struct {
|
|
Time sql.NullTime
|
|
}
|
|
|
|
type g2222 struct {
|
|
Time time.Time
|
|
}
|
|
|
|
type g11111 struct {
|
|
Blob json.RawMessage
|
|
}
|
|
|
|
type embeddedS struct {
|
|
Name string
|
|
SomeField int
|
|
}
|
|
type g22222 struct {
|
|
Blob embeddedS
|
|
}
|
|
|
|
type t1 struct {
|
|
Field string `nmap:"skip"`
|
|
}
|
|
|
|
type dt1 struct {
|
|
Field string
|
|
}
|
|
|
|
type o1 struct {
|
|
Field string `nmap:"map_to:AnotherField"`
|
|
}
|
|
|
|
type do1 struct {
|
|
AnotherField string
|
|
}
|
|
|
|
type ptr1 struct {
|
|
Field sql.NullString
|
|
}
|
|
|
|
type ptro1 struct {
|
|
Field *string
|
|
}
|
|
|
|
type i1 struct {
|
|
Field sql.NullInt64
|
|
}
|
|
|
|
type io1 struct {
|
|
Field int
|
|
}
|
|
|
|
func TestOne(t *testing.T) {
|
|
|
|
src := g1{Name: sql.NullString{String: "string", Valid: true}}
|
|
dst := g2{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src).Elem(), reflect.ValueOf(&dst).Elem()))
|
|
assert.Equal(t, g2{Name: "string"}, dst)
|
|
|
|
src = g1{Name: sql.NullString{Valid: false}}
|
|
dst = g2{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src).Elem(), reflect.ValueOf(&dst).Elem()))
|
|
assert.Equal(t, g2{Name: ""}, dst)
|
|
|
|
src1 := g11{Name: sql.NullString{String: "aaa", Valid: true}, PublicId: sql.NullString{String: "id", Valid: true}}
|
|
dst1 := g22{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src1).Elem(), reflect.ValueOf(&dst1).Elem()))
|
|
assert.Equal(t, g22{Name: "aaa", PublicId: "id"}, dst1)
|
|
|
|
src2 := g111{Name: sql.NullString{String: "aaa", Valid: true}, TrueOrFalse: sql.NullBool{Bool: true, Valid: true}}
|
|
dst2 := g222{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src2).Elem(), reflect.ValueOf(&dst2).Elem()))
|
|
assert.Equal(t, g222{Name: "aaa", TrueOrFalse: true}, dst2)
|
|
|
|
jb, _ := json.Marshal(embeddedS{Name: "blob-name", SomeField: 1})
|
|
src3 := g11111{Blob: json.RawMessage(jb)}
|
|
dst3 := g22222{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src3).Elem(), reflect.ValueOf(&dst3).Elem()))
|
|
assert.Equal(t, g22222{Blob: embeddedS{Name: "blob-name", SomeField: 1}}, dst3)
|
|
|
|
src4 := g11111{}
|
|
dst4 := g22222{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src4).Elem(), reflect.ValueOf(&dst4).Elem()))
|
|
assert.Equal(t, g22222{}, dst4)
|
|
|
|
src5 := t1{Field: "shouldskip"}
|
|
dst5 := dt1{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src5).Elem(), reflect.ValueOf(&dst5).Elem()))
|
|
assert.Equal(t, dt1{}, dst5)
|
|
|
|
src6 := o1{Field: "fieldvalue"}
|
|
dst6 := do1{}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src6).Elem(), reflect.ValueOf(&dst6).Elem()))
|
|
assert.Equal(t, do1{AnotherField: "fieldvalue"}, dst6)
|
|
|
|
src7 := i1{Field: sql.NullInt64{Int64: int64(1), Valid: true}}
|
|
dst7 := io1{Field: 1}
|
|
assert.NoError(t, networkmapdb.FromSqlTypesToSharedTypes(reflect.ValueOf(&src7).Elem(), reflect.ValueOf(&dst7).Elem()))
|
|
assert.Equal(t, io1{Field: 1}, dst7)
|
|
}
|