github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/libnetwork/options/options_test.go (about) 1 package options 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 8 _ "github.com/docker/libnetwork/testutils" 9 ) 10 11 func TestGenerate(t *testing.T) { 12 gen := NewGeneric() 13 gen["Int"] = 1 14 gen["Rune"] = 'b' 15 gen["Float64"] = 2.0 16 17 type Model struct { 18 Int int 19 Rune rune 20 Float64 float64 21 } 22 23 result, err := GenerateFromModel(gen, Model{}) 24 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 cast, ok := result.(Model) 30 if !ok { 31 t.Fatalf("result has unexpected type %s", reflect.TypeOf(result)) 32 } 33 if expected := 1; cast.Int != expected { 34 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int) 35 } 36 if expected := 'b'; cast.Rune != expected { 37 t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune) 38 } 39 if expected := 2.0; cast.Float64 != expected { 40 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64) 41 } 42 } 43 44 func TestGeneratePtr(t *testing.T) { 45 gen := NewGeneric() 46 gen["Int"] = 1 47 gen["Rune"] = 'b' 48 gen["Float64"] = 2.0 49 50 type Model struct { 51 Int int 52 Rune rune 53 Float64 float64 54 } 55 56 result, err := GenerateFromModel(gen, &Model{}) 57 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 cast, ok := result.(*Model) 63 if !ok { 64 t.Fatalf("result has unexpected type %s", reflect.TypeOf(result)) 65 } 66 if expected := 1; cast.Int != expected { 67 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Int) 68 } 69 if expected := 'b'; cast.Rune != expected { 70 t.Fatalf("wrong value for field Rune: expected %v, got %v", expected, cast.Rune) 71 } 72 if expected := 2.0; cast.Float64 != expected { 73 t.Fatalf("wrong value for field Int: expected %v, got %v", expected, cast.Float64) 74 } 75 } 76 77 func TestGenerateMissingField(t *testing.T) { 78 type Model struct{} 79 _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{}) 80 81 if _, ok := err.(NoSuchFieldError); !ok { 82 t.Fatalf("expected NoSuchFieldError, got %#v", err) 83 } else if expected := "no field"; !strings.Contains(err.Error(), expected) { 84 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 85 } 86 } 87 88 func TestFieldCannotBeSet(t *testing.T) { 89 type Model struct{ foo int } 90 _, err := GenerateFromModel(Generic{"foo": "bar"}, Model{}) 91 92 if _, ok := err.(CannotSetFieldError); !ok { 93 t.Fatalf("expected CannotSetFieldError, got %#v", err) 94 } else if expected := "cannot set field"; !strings.Contains(err.Error(), expected) { 95 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 96 } 97 } 98 99 func TestTypeMismatchError(t *testing.T) { 100 type Model struct{ Foo int } 101 _, err := GenerateFromModel(Generic{"Foo": "bar"}, Model{}) 102 103 if _, ok := err.(TypeMismatchError); !ok { 104 t.Fatalf("expected TypeMismatchError, got %#v", err) 105 } else if expected := "type mismatch"; !strings.Contains(err.Error(), expected) { 106 t.Fatalf("expected %q in error message, got %s", expected, err.Error()) 107 } 108 }