Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcde7d65

Browse files
committed
test: also run ConvertState against tfstate
1 parent37aa13e commitcde7d65

File tree

1 file changed

+67
-58
lines changed

1 file changed

+67
-58
lines changed

‎provisioner/terraform/resources_test.go‎

Lines changed: 67 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -51,75 +51,84 @@ func TestConvertStateGoldenFiles(t *testing.T) {
5151
testFiles,err:=os.ReadDir(filepath.Join(testResourceDirectories,testDirectory.Name()))
5252
require.NoError(t,err)
5353

54-
planIdx:=slices.IndexFunc(testFiles,func(entry os.DirEntry)bool {
55-
returnstrings.HasSuffix(entry.Name(),".tfplan.json")
56-
})
57-
dotIdx:=slices.IndexFunc(testFiles,func(entry os.DirEntry)bool {
58-
returnstrings.HasSuffix(entry.Name(),".tfplan.dot")
59-
})
54+
for_,step:=range []string{"plan","state"} {
55+
planIdx:=slices.IndexFunc(testFiles,func(entry os.DirEntry)bool {
56+
returnstrings.HasSuffix(entry.Name(),fmt.Sprintf(".tf%s.json",step))
57+
})
58+
dotIdx:=slices.IndexFunc(testFiles,func(entry os.DirEntry)bool {
59+
returnstrings.HasSuffix(entry.Name(),fmt.Sprintf(".tf%s.dot",step))
60+
})
6061

61-
ifplanIdx==-1||dotIdx==-1 {
62-
continue
63-
}
62+
ifplanIdx==-1||dotIdx==-1 {
63+
continue
64+
}
6465

65-
t.Run(testDirectory.Name(),func(t*testing.T) {
66-
testDirectoryPath:=filepath.Join(testResourceDirectories,testDirectory.Name())
67-
planFile:=filepath.Join(testDirectoryPath,testFiles[planIdx].Name())
68-
dotFile:=filepath.Join(testDirectoryPath,testFiles[dotIdx].Name())
69-
t.Parallel()
70-
ctx:=testutil.Context(t,testutil.WaitMedium)
71-
logger:=slogtest.Make(t,nil)
66+
t.Run(step+"_"+testDirectory.Name(),func(t*testing.T) {
67+
testDirectoryPath:=filepath.Join(testResourceDirectories,testDirectory.Name())
68+
planFile:=filepath.Join(testDirectoryPath,testFiles[planIdx].Name())
69+
dotFile:=filepath.Join(testDirectoryPath,testFiles[dotIdx].Name())
70+
t.Parallel()
71+
ctx:=testutil.Context(t,testutil.WaitMedium)
72+
logger:=slogtest.Make(t,nil)
7273

73-
// Gather plan
74-
tfPlanRaw,err:=os.ReadFile(planFile)
75-
require.NoError(t,err)
74+
// Gather plan
75+
tfStepRaw,err:=os.ReadFile(planFile)
76+
require.NoError(t,err)
7677

77-
vartfPlan tfjson.Plan
78-
err=json.Unmarshal(tfPlanRaw,&tfPlan)
79-
require.NoError(t,err)
78+
varmodules []*tfjson.StateModule
79+
switchstep {
80+
case"plan":
81+
vartfPlan tfjson.Plan
82+
err=json.Unmarshal(tfStepRaw,&tfPlan)
83+
require.NoError(t,err)
8084

81-
modules:= []*tfjson.StateModule{tfPlan.PlannedValues.RootModule}
82-
iftfPlan.PriorState!=nil {
83-
modules=append(modules,tfPlan.PriorState.Values.RootModule)
84-
}else {
85-
// Ensure that resources canF be duplicated in the source state
86-
// and that no errors occur!
87-
modules=append(modules,tfPlan.PlannedValues.RootModule)
88-
}
85+
modules= []*tfjson.StateModule{tfPlan.PlannedValues.RootModule}
86+
iftfPlan.PriorState!=nil {
87+
modules=append(modules,tfPlan.PriorState.Values.RootModule)
88+
}
89+
case"state":
90+
vartfState tfjson.State
91+
err=json.Unmarshal(tfStepRaw,&tfState)
92+
require.NoError(t,err)
93+
modules= []*tfjson.StateModule{tfState.Values.RootModule}
94+
default:
95+
t.Fatalf("unknown step: %s",step)
96+
}
8997

90-
// Gather graph
91-
dotFileRaw,err:=os.ReadFile(dotFile)
92-
require.NoError(t,err)
98+
// Gather graph
99+
dotFileRaw,err:=os.ReadFile(dotFile)
100+
require.NoError(t,err)
93101

94-
varexpectedOutputany
95-
state,err:=terraform.ConvertState(ctx,modules,string(dotFileRaw),logger)
96-
iferr==nil {
97-
sortResources(state.Resources)
98-
sortExternalAuthProviders(state.ExternalAuthProviders)
99-
deterministicAppIDs(state.Resources)
100-
expectedOutput=state
101-
}else {
102-
// Write the error to the file then. Track errors as much as valid paths.
103-
expectedOutput=err.Error()
104-
}
102+
varexpectedOutputany
103+
state,err:=terraform.ConvertState(ctx,modules,string(dotFileRaw),logger)
104+
iferr==nil {
105+
sortResources(state.Resources)
106+
sortExternalAuthProviders(state.ExternalAuthProviders)
107+
deterministicAppIDs(state.Resources)
108+
expectedOutput=state
109+
}else {
110+
// Write the error to the file then. Track errors as much as valid paths.
111+
expectedOutput=err.Error()
112+
}
105113

106-
expPath:=filepath.Join(testDirectoryPath,"converted_state.golden")
107-
if*updateGoldenFiles {
108-
gotBytes,err:=json.MarshalIndent(expectedOutput,""," ")
109-
require.NoError(t,err,"marshaling converted state to JSON")
110-
err=os.WriteFile(expPath,gotBytes,0o600)
111-
require.NoError(t,err)
112-
return
113-
}
114+
expPath:=filepath.Join(testDirectoryPath,fmt.Sprintf("converted_state.%s.golden",step))
115+
if*updateGoldenFiles {
116+
gotBytes,err:=json.MarshalIndent(expectedOutput,""," ")
117+
require.NoError(t,err,"marshaling converted state to JSON")
118+
err=os.WriteFile(expPath,gotBytes,0o600)
119+
require.NoError(t,err)
120+
return
121+
}
114122

115-
gotBytes,err:=json.Marshal(expectedOutput)
116-
require.NoError(t,err,"marshaling converted state to JSON")
123+
gotBytes,err:=json.Marshal(expectedOutput)
124+
require.NoError(t,err,"marshaling converted state to JSON")
117125

118-
expBytes,err:=os.ReadFile(expPath)
119-
require.NoError(t,err)
126+
expBytes,err:=os.ReadFile(expPath)
127+
require.NoError(t,err)
120128

121-
require.JSONEq(t,string(expBytes),string(gotBytes),"converted state")
122-
})
129+
require.JSONEq(t,string(expBytes),string(gotBytes),"converted state")
130+
})
131+
}
123132
}
124133
}
125134

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp