github.com/iaas-resource-provision/iaas-rpc@v1.0.7-0.20211021023331-ed21f798c408/internal/configs/configschema/marks_test.go (about)

     1  package configschema
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/zclconf/go-cty/cty"
     8  )
     9  
    10  func TestBlockValueMarks(t *testing.T) {
    11  	schema := &Block{
    12  		Attributes: map[string]*Attribute{
    13  			"unsensitive": {
    14  				Type:     cty.String,
    15  				Optional: true,
    16  			},
    17  			"sensitive": {
    18  				Type:      cty.String,
    19  				Sensitive: true,
    20  			},
    21  		},
    22  
    23  		BlockTypes: map[string]*NestedBlock{
    24  			"list": {
    25  				Nesting: NestingList,
    26  				Block: Block{
    27  					Attributes: map[string]*Attribute{
    28  						"unsensitive": {
    29  							Type:     cty.String,
    30  							Optional: true,
    31  						},
    32  						"sensitive": {
    33  							Type:      cty.String,
    34  							Sensitive: true,
    35  						},
    36  					},
    37  				},
    38  			},
    39  		},
    40  	}
    41  
    42  	for _, tc := range []struct {
    43  		given  cty.Value
    44  		expect cty.Value
    45  	}{
    46  		{
    47  			cty.UnknownVal(schema.ImpliedType()),
    48  			cty.UnknownVal(schema.ImpliedType()),
    49  		},
    50  		{
    51  			cty.NullVal(schema.ImpliedType()),
    52  			cty.NullVal(schema.ImpliedType()),
    53  		},
    54  		{
    55  			cty.ObjectVal(map[string]cty.Value{
    56  				"sensitive":   cty.UnknownVal(cty.String),
    57  				"unsensitive": cty.UnknownVal(cty.String),
    58  				"list":        cty.UnknownVal(schema.BlockTypes["list"].ImpliedType()),
    59  			}),
    60  			cty.ObjectVal(map[string]cty.Value{
    61  				"sensitive":   cty.UnknownVal(cty.String).Mark("sensitive"),
    62  				"unsensitive": cty.UnknownVal(cty.String),
    63  				"list":        cty.UnknownVal(schema.BlockTypes["list"].ImpliedType()),
    64  			}),
    65  		},
    66  		{
    67  			cty.ObjectVal(map[string]cty.Value{
    68  				"sensitive":   cty.NullVal(cty.String),
    69  				"unsensitive": cty.UnknownVal(cty.String),
    70  				"list": cty.ListVal([]cty.Value{
    71  					cty.ObjectVal(map[string]cty.Value{
    72  						"sensitive":   cty.UnknownVal(cty.String),
    73  						"unsensitive": cty.UnknownVal(cty.String),
    74  					}),
    75  					cty.ObjectVal(map[string]cty.Value{
    76  						"sensitive":   cty.NullVal(cty.String),
    77  						"unsensitive": cty.NullVal(cty.String),
    78  					}),
    79  				}),
    80  			}),
    81  			cty.ObjectVal(map[string]cty.Value{
    82  				"sensitive":   cty.NullVal(cty.String).Mark("sensitive"),
    83  				"unsensitive": cty.UnknownVal(cty.String),
    84  				"list": cty.ListVal([]cty.Value{
    85  					cty.ObjectVal(map[string]cty.Value{
    86  						"sensitive":   cty.UnknownVal(cty.String).Mark("sensitive"),
    87  						"unsensitive": cty.UnknownVal(cty.String),
    88  					}),
    89  					cty.ObjectVal(map[string]cty.Value{
    90  						"sensitive":   cty.NullVal(cty.String).Mark("sensitive"),
    91  						"unsensitive": cty.NullVal(cty.String),
    92  					}),
    93  				}),
    94  			}),
    95  		},
    96  	} {
    97  		t.Run(fmt.Sprintf("%#v", tc.given), func(t *testing.T) {
    98  			got := tc.given.MarkWithPaths(schema.ValueMarks(tc.given, nil))
    99  			if !got.RawEquals(tc.expect) {
   100  				t.Fatalf("\nexpected: %#v\ngot:      %#v\n", tc.expect, got)
   101  			}
   102  		})
   103  	}
   104  }