@ -383,6 +383,95 @@ func TestPlanSensitiveOutputNested(t *testing.T) {
}
}
func TestPlanSensitiveOutputAsInput ( t * testing . T ) {
ctx := context . Background ( )
cfg := loadMainBundleConfigForTest ( t , "sensitive-output-as-input" )
fakePlanTimestamp , err := time . Parse ( time . RFC3339 , "1991-08-25T20:57:08Z" )
if err != nil {
t . Fatal ( err )
}
changesCh := make ( chan stackplan . PlannedChange , 8 )
diagsCh := make ( chan tfdiags . Diagnostic , 2 )
req := PlanRequest {
Config : cfg ,
ForcePlanTimestamp : & fakePlanTimestamp ,
}
resp := PlanResponse {
PlannedChanges : changesCh ,
Diagnostics : diagsCh ,
}
go Plan ( ctx , & req , & resp )
gotChanges , diags := collectPlanOutput ( changesCh , diagsCh )
if len ( diags ) != 0 {
t . Errorf ( "unexpected diagnostics\n%s" , diags . ErrWithWarnings ( ) . Error ( ) )
}
wantChanges := [ ] stackplan . PlannedChange {
& stackplan . PlannedChangeApplyable {
Applyable : true ,
} ,
& stackplan . PlannedChangeComponentInstance {
Addr : stackaddrs . Absolute (
stackaddrs . RootStackInstance . Child ( "sensitive" , addrs . NoKey ) ,
stackaddrs . ComponentInstance {
Component : stackaddrs . Component { Name : "self" } ,
} ,
) ,
Action : plans . Create ,
PlannedInputValues : make ( map [ string ] plans . DynamicValue ) ,
PlannedOutputValues : map [ string ] cty . Value {
"out" : cty . StringVal ( "secret" ) . Mark ( marks . Sensitive ) ,
} ,
PlanTimestamp : fakePlanTimestamp ,
} ,
& stackplan . PlannedChangeComponentInstance {
Addr : stackaddrs . Absolute (
stackaddrs . RootStackInstance ,
stackaddrs . ComponentInstance {
Component : stackaddrs . Component { Name : "self" } ,
} ,
) ,
Action : plans . Create ,
PlannedInputValues : map [ string ] plans . DynamicValue {
"secret" : mustPlanDynamicValueDynamicType ( cty . StringVal ( "secret" ) ) ,
} ,
PlannedInputValueMarks : map [ string ] [ ] cty . PathValueMarks {
"secret" : {
{
Marks : cty . NewValueMarks ( marks . Sensitive ) ,
} ,
} ,
} ,
PlannedOutputValues : map [ string ] cty . Value {
"result" : cty . StringVal ( "SECRET" ) . Mark ( marks . Sensitive ) ,
} ,
PlanTimestamp : fakePlanTimestamp ,
} ,
& stackplan . PlannedChangeHeader {
TerraformVersion : version . SemVer ,
} ,
& stackplan . PlannedChangeOutputValue {
Addr : stackaddrs . OutputValue { Name : "result" } ,
Action : plans . Create ,
OldValue : plans . DynamicValue { 0xc0 } , // MessagePack nil
NewValue : mustPlanDynamicValue ( cty . StringVal ( "SECRET" ) ) ,
NewValueMarks : [ ] cty . PathValueMarks { { Marks : cty . NewValueMarks ( marks . Sensitive ) } } ,
} ,
}
sort . SliceStable ( gotChanges , func ( i , j int ) bool {
// An arbitrary sort just to make the result stable for comparison.
return fmt . Sprintf ( "%T" , gotChanges [ i ] ) < fmt . Sprintf ( "%T" , gotChanges [ j ] )
} )
if diff := cmp . Diff ( wantChanges , gotChanges , ctydebug . CmpOptions , cmpCollectionsSet ) ; diff != "" {
t . Errorf ( "wrong changes\n%s" , diff )
}
}
func TestPlanWithProviderConfig ( t * testing . T ) {
ctx := context . Background ( )
cfg := loadMainBundleConfigForTest ( t , "with-provider-config" )