github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/helper/pluginutils/hclutils/types_test.go (about)

     1  package hclutils_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hashicorp/nomad/helper/pluginutils/hclutils"
     7  	"github.com/hashicorp/nomad/plugins/shared/hclspec"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestMapStrInt_JsonArrays(t *testing.T) {
    12  	spec := hclspec.NewObject(map[string]*hclspec.Spec{
    13  		"port_map": hclspec.NewAttr("port_map", "list(map(number))", false),
    14  	})
    15  
    16  	type PidMapTaskConfig struct {
    17  		PortMap hclutils.MapStrInt `codec:"port_map"`
    18  	}
    19  
    20  	parser := hclutils.NewConfigParser(spec)
    21  
    22  	expected := PidMapTaskConfig{
    23  		PortMap: map[string]int{
    24  			"http":  80,
    25  			"https": 443,
    26  			"ssh":   25,
    27  		},
    28  	}
    29  
    30  	t.Run("hcl case", func(t *testing.T) {
    31  		config := `
    32  config {
    33    port_map {
    34      http  = 80
    35      https = 443
    36      ssh   = 25
    37    }
    38  }`
    39  		// Test decoding
    40  		var tc PidMapTaskConfig
    41  		parser.ParseHCL(t, config, &tc)
    42  
    43  		require.EqualValues(t, expected, tc)
    44  
    45  	})
    46  	jsonCases := []struct {
    47  		name string
    48  		json string
    49  	}{
    50  		{
    51  			"array of map entries",
    52  			`{"Config": {"port_map": [{"http": 80}, {"https": 443}, {"ssh": 25}]}}`,
    53  		},
    54  		{
    55  			"array with one map",
    56  			`{"Config": {"port_map": [{"http": 80, "https": 443, "ssh": 25}]}}`,
    57  		},
    58  		{
    59  			"array of maps",
    60  			`{"Config": {"port_map": [{"http": 80, "https": 443}, {"ssh": 25}]}}`,
    61  		},
    62  	}
    63  
    64  	for _, c := range jsonCases {
    65  		t.Run("json:"+c.name, func(t *testing.T) {
    66  			// Test decoding
    67  			var tc PidMapTaskConfig
    68  			parser.ParseJson(t, c.json, &tc)
    69  
    70  			require.EqualValues(t, expected, tc)
    71  
    72  		})
    73  	}
    74  }
    75  
    76  func TestMapStrStr_JsonArrays(t *testing.T) {
    77  	spec := hclspec.NewObject(map[string]*hclspec.Spec{
    78  		"port_map": hclspec.NewAttr("port_map", "list(map(string))", false),
    79  	})
    80  
    81  	type PidMapTaskConfig struct {
    82  		PortMap hclutils.MapStrStr `codec:"port_map"`
    83  	}
    84  
    85  	parser := hclutils.NewConfigParser(spec)
    86  
    87  	expected := PidMapTaskConfig{
    88  		PortMap: map[string]string{
    89  			"http":  "80",
    90  			"https": "443",
    91  			"ssh":   "25",
    92  		},
    93  	}
    94  
    95  	t.Run("hcl case", func(t *testing.T) {
    96  		config := `
    97  config {
    98    port_map {
    99      http  = "80"
   100      https = "443"
   101      ssh   = "25"
   102    }
   103  }`
   104  		// Test decoding
   105  		var tc PidMapTaskConfig
   106  		parser.ParseHCL(t, config, &tc)
   107  
   108  		require.EqualValues(t, expected, tc)
   109  
   110  	})
   111  	jsonCases := []struct {
   112  		name string
   113  		json string
   114  	}{
   115  		{
   116  			"array of map entries",
   117  			`{"Config": {"port_map": [{"http": "80"}, {"https": "443"}, {"ssh": "25"}]}}`,
   118  		},
   119  		{
   120  			"array with one map",
   121  			`{"Config": {"port_map": [{"http": "80", "https": "443", "ssh": "25"}]}}`,
   122  		},
   123  		{
   124  			"array of maps",
   125  			`{"Config": {"port_map": [{"http": "80", "https": "443"}, {"ssh": "25"}]}}`,
   126  		},
   127  	}
   128  
   129  	for _, c := range jsonCases {
   130  		t.Run("json:"+c.name, func(t *testing.T) {
   131  			// Test decoding
   132  			var tc PidMapTaskConfig
   133  			parser.ParseJson(t, c.json, &tc)
   134  
   135  			require.EqualValues(t, expected, tc)
   136  
   137  		})
   138  	}
   139  }