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  }