github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/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  }