driftctl/pkg/cmd/scan/output/output_test.go

264 lines
5.8 KiB
Go
Raw Normal View History

package output
import (
"fmt"
2020-12-16 12:02:02 +00:00
"github.com/cloudskiff/driftctl/pkg/alerter"
"github.com/cloudskiff/driftctl/pkg/analyser"
"github.com/cloudskiff/driftctl/pkg/remote"
"github.com/cloudskiff/driftctl/pkg/remote/aws"
"github.com/cloudskiff/driftctl/pkg/remote/github"
testresource "github.com/cloudskiff/driftctl/test/resource"
"github.com/r3labs/diff/v2"
)
func fakeAnalysis() *analyser.Analysis {
a := analyser.Analysis{}
a.AddUnmanaged(
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "unmanaged-id-1",
Type: "aws_unmanaged_resource",
},
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "unmanaged-id-2",
Type: "aws_unmanaged_resource",
},
)
a.AddDeleted(
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "deleted-id-1",
Type: "aws_deleted_resource",
2020-12-22 11:17:04 +00:00
}, &testresource.FakeResource{
Id: "deleted-id-2",
Type: "aws_deleted_resource",
},
)
a.AddManaged(
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
},
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "no-diff-id-1",
Type: "aws_no_diff_resource",
},
)
2020-12-22 11:17:04 +00:00
a.AddDifference(analyser.Difference{Res: &testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
2021-01-08 17:14:26 +00:00
}, Changelog: []analyser.Change{
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
Path: []string{"updated", "field"},
From: "foobar",
To: "barfoo",
},
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.CREATE,
Path: []string{"new", "field"},
From: nil,
To: "newValue",
},
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.DELETE,
Path: []string{"a"},
From: "oldValue",
To: nil,
},
},
}})
return &a
}
func fakeAnalysisNoDrift() *analyser.Analysis {
a := analyser.Analysis{}
for i := 0; i < 5; i++ {
2020-12-22 11:17:04 +00:00
a.AddManaged(&testresource.FakeResource{
Id: "managed-id-" + fmt.Sprintf("%d", i),
Type: "aws_managed_resource",
})
}
return &a
}
func fakeAnalysisWithJsonFields() *analyser.Analysis {
a := analyser.Analysis{}
a.AddManaged(
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
},
)
a.AddManaged(
2020-12-22 11:17:04 +00:00
&testresource.FakeResource{
Id: "diff-id-2",
Type: "aws_diff_resource",
},
)
2020-12-22 11:17:04 +00:00
a.AddDifference(analyser.Difference{Res: &testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
2021-01-08 17:14:26 +00:00
}, Changelog: []analyser.Change{
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
Path: []string{"Json"},
From: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Removed\":\"Added\",\"Changed\":[\"ec2:DescribeInstances\"],\"Effect\":\"Allow\",\"Resource\":\"*\"}]}",
To: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Changed\":[\"ec2:*\"],\"NewField\":[\"foobar\"],\"Effect\":\"Allow\",\"Resource\":\"*\"}]}",
},
},
}})
a.AddDifference(analyser.Difference{Res: &testresource.FakeResource{
Id: "diff-id-2",
Type: "aws_diff_resource",
2021-01-08 17:14:26 +00:00
}, Changelog: []analyser.Change{
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
Path: []string{"Json"},
From: "{\"foo\":\"bar\"}",
To: "{\"bar\":\"foo\"}",
},
},
}})
return &a
}
func fakeAnalysisWithStringerResources() *analyser.Analysis {
a := analyser.Analysis{}
a.AddDeleted(
&testresource.FakeResourceStringer{
Id: "dfjkgnbsgj",
Name: "deleted resource",
},
)
a.AddManaged(
&testresource.FakeResourceStringer{
Id: "usqyfsdbgjsdgjkdfg",
Name: "managed resource",
},
)
a.AddUnmanaged(
&testresource.FakeResourceStringer{
Id: "duysgkfdjfdgfhd",
Name: "unmanaged resource",
},
)
a.AddDifference(analyser.Difference{Res: &testresource.FakeResourceStringer{
Id: "gdsfhgkbn",
Name: "resource with diff",
2021-01-08 17:14:26 +00:00
}, Changelog: []analyser.Change{
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
Path: []string{"Name"},
From: "",
To: "resource with diff",
},
},
}})
return &a
}
2020-12-16 12:02:02 +00:00
func fakeAnalysisWithComputedFields() *analyser.Analysis {
a := analyser.Analysis{}
a.AddManaged(
&testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
},
)
a.AddDifference(analyser.Difference{Res: testresource.FakeResource{
Id: "diff-id-1",
Type: "aws_diff_resource",
2021-01-08 17:14:26 +00:00
}, Changelog: []analyser.Change{
2020-12-16 12:02:02 +00:00
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
Path: []string{"updated", "field"},
From: "foobar",
To: "barfoo",
},
Computed: true,
2020-12-16 12:02:02 +00:00
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.CREATE,
Path: []string{"new", "field"},
From: nil,
To: "newValue",
},
2020-12-16 12:02:02 +00:00
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.DELETE,
Path: []string{"a"},
From: "oldValue",
To: nil,
},
Computed: true,
2020-12-16 12:02:02 +00:00
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
From: "foo",
To: "oof",
Path: []string{
"struct",
"0",
"array",
"0",
},
2020-12-16 12:02:02 +00:00
},
2021-01-08 17:14:26 +00:00
Computed: true,
2020-12-16 12:02:02 +00:00
},
{
2021-01-08 17:14:26 +00:00
Change: diff.Change{
Type: diff.UPDATE,
From: "one",
To: "two",
Path: []string{
"struct",
"0",
"string",
},
2020-12-16 12:02:02 +00:00
},
2021-01-08 17:14:26 +00:00
Computed: true,
2020-12-16 12:02:02 +00:00
},
}})
2021-01-11 16:33:23 +00:00
a.SetAlerts(alerter.Alerts{
"": []alerter.Alert{
analyser.NewComputedDiffAlert(),
},
})
return &a
}
func fakeAnalysisWithAWSEnumerationError() *analyser.Analysis {
a := analyser.Analysis{}
a.SetAlerts(alerter.Alerts{
"": []alerter.Alert{
remote.NewEnumerationAccessDeniedAlert(aws.RemoteAWSTerraform, "aws_vpc", "aws_vpc"),
remote.NewEnumerationAccessDeniedAlert(aws.RemoteAWSTerraform, "aws_sqs", "aws_sqs"),
remote.NewEnumerationAccessDeniedAlert(aws.RemoteAWSTerraform, "aws_sns", "aws_sns"),
},
})
return &a
}
func fakeAnalysisWithGithubEnumerationError() *analyser.Analysis {
a := analyser.Analysis{}
a.SetAlerts(alerter.Alerts{
"": []alerter.Alert{
remote.NewEnumerationAccessDeniedAlert(github.RemoteGithubTerraform, "github_team", "github_team"),
remote.NewEnumerationAccessDeniedAlert(github.RemoteGithubTerraform, "github_team_membership", "github_team"),
2020-12-16 12:02:02 +00:00
},
})
return &a
}