github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/internal/testing/apitests/structsync_test.go (about) 1 package apitests 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/hashicorp/nomad/api" 8 "github.com/hashicorp/nomad/nomad/structs" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // Tests that api and struct values are equivalent 13 // 14 // Given that vendoring libraries prune tests by default, test dependencies 15 // aren't leaked to clients of the package - so it should be safe to add 16 // such dependency without affecting api clients. 17 18 func TestDefaultResourcesAreInSync(t *testing.T) { 19 apiR := api.DefaultResources() 20 structsR := structs.DefaultResources() 21 22 require.EqualValues(t, *structsR, toStructsResource(t, apiR)) 23 24 // match after canonicalization 25 apiR.Canonicalize() 26 structsR.Canonicalize() 27 require.EqualValues(t, *structsR, toStructsResource(t, apiR)) 28 } 29 30 func TestMinResourcesAreInSync(t *testing.T) { 31 apiR := api.MinResources() 32 structsR := structs.MinResources() 33 34 require.EqualValues(t, *structsR, toStructsResource(t, apiR)) 35 36 // match after canonicalization 37 apiR.Canonicalize() 38 structsR.Canonicalize() 39 require.EqualValues(t, *structsR, toStructsResource(t, apiR)) 40 } 41 42 func TestNewDefaultRescheulePolicyInSync(t *testing.T) { 43 cases := []struct { 44 typ string 45 expected structs.ReschedulePolicy 46 }{ 47 {"service", structs.DefaultServiceJobReschedulePolicy}, 48 {"batch", structs.DefaultBatchJobReschedulePolicy}, 49 {"system", structs.ReschedulePolicy{}}, 50 } 51 52 for _, c := range cases { 53 t.Run(c.typ, func(t *testing.T) { 54 apiP := api.NewDefaultReschedulePolicy(c.typ) 55 56 var found structs.ReschedulePolicy 57 toStructs(t, &found, apiP) 58 59 require.EqualValues(t, c.expected, found) 60 }) 61 } 62 } 63 64 func TestNewDefaultRestartPolicyInSync(t *testing.T) { 65 cases := []struct { 66 typ string 67 expected structs.RestartPolicy 68 }{ 69 {"service", structs.DefaultServiceJobRestartPolicy}, 70 {"batch", structs.DefaultBatchJobRestartPolicy}, 71 {"system", structs.DefaultServiceJobRestartPolicy}, 72 } 73 74 for _, c := range cases { 75 t.Run(c.typ, func(t *testing.T) { 76 job := api.Job{Type: &c.typ} 77 var tg api.TaskGroup 78 tg.Canonicalize(&job) 79 80 apiP := tg.RestartPolicy 81 82 var found structs.RestartPolicy 83 toStructs(t, &found, apiP) 84 85 require.EqualValues(t, c.expected, found) 86 }) 87 } 88 } 89 90 func toStructsResource(t *testing.T, in *api.Resources) structs.Resources { 91 var out structs.Resources 92 toStructs(t, &out, in) 93 return out 94 } 95 96 func toStructs(t *testing.T, out, in interface{}) { 97 bytes, err := json.Marshal(in) 98 require.NoError(t, err) 99 100 err = json.Unmarshal(bytes, &out) 101 require.NoError(t, err) 102 }