Skip to content

Commit c5cdea5

Browse files
authored
855 grouping legal graph (#908)
for graphical representation - add relevant edges to each node so that it is consistent
1 parent 22fd40b commit c5cdea5

22 files changed

+638
-94
lines changed

cmd/analyzer/subcmds/analysis.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package subcmds
99
import (
1010
"errors"
1111
"fmt"
12+
"slices"
1213

1314
"github.com/spf13/cobra"
1415

@@ -79,8 +80,21 @@ func analysisVPCConfigs(cmd *cobra.Command, inArgs *inArgs, analysisType vpcmode
7980
return err
8081
}
8182
outFormat := inArgs.outputFormat.ToModelFormat()
83+
consistencyEdgesExternal := slices.Contains([]vpcmodel.OutFormat{vpcmodel.DRAWIO, vpcmodel.SVG, vpcmodel.HTML},
84+
outFormat)
85+
var groupingType int
86+
switch {
87+
case !inArgs.grouping && !consistencyEdgesExternal:
88+
groupingType = vpcmodel.NoGroupingNoConsistencyEdges
89+
case !inArgs.grouping && consistencyEdgesExternal:
90+
groupingType = vpcmodel.NoGroupingWithConsistencyEdges
91+
case inArgs.grouping && !consistencyEdgesExternal:
92+
groupingType = vpcmodel.GroupingNoConsistencyEdges
93+
default:
94+
groupingType = vpcmodel.GroupingWithConsistencyEdges
95+
}
8296
og, err := vpcmodel.NewOutputGenerator(vpcConfigs,
83-
inArgs.grouping,
97+
groupingType,
8498
analysisType,
8599
false,
86100
inArgs.explanationArgs, outFormat, inArgs.lbAbstraction)

pkg/commonvpc/testfunc/analysis_output_test_functionality.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515

1616
type VpcAnalysisTest struct {
1717
VpcTestCommon
18-
Grouping bool
18+
GroupingType int
1919
NoLbAbstract bool
2020
}
2121

@@ -24,6 +24,6 @@ func (tt *VpcAnalysisTest) TestAnalysisSingleTest(t *testing.T, mode testMode, r
2424
tt.setMode(mode)
2525
t.Run(tt.Name, func(t *testing.T) {
2626
t.Parallel()
27-
tt.runSingleCommonTest(t, testDir, rc, tt.Grouping, tt.NoLbAbstract, nil)
27+
tt.runSingleCommonTest(t, testDir, rc, tt.GroupingType, tt.NoLbAbstract, nil)
2828
})
2929
}

pkg/commonvpc/testfunc/common_test_functionality.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const (
4747
suffixOutFileDiffEndpoints = "endpointsDiff"
4848
suffixOutFileExplain = "explain"
4949
suffixOutFileDetail = "_detail"
50+
consistencyEdgesExternal = "_EdgeConsistent"
5051
txtOutSuffix = ".txt"
5152
mdOutSuffix = ".md"
5253
JSONOutSuffix = ".json"
@@ -86,6 +87,7 @@ func getTestFileName(testName string,
8687
grouping bool,
8788
noLbAbstract bool,
8889
detailExplain bool,
90+
addConsistencyEdgesExternal bool,
8991
format vpcmodel.OutFormat,
9092
configName string,
9193
allVPCs bool,
@@ -128,6 +130,9 @@ func getTestFileName(testName string,
128130
if detailExplain {
129131
res += suffixOutFileDetail
130132
}
133+
if addConsistencyEdgesExternal {
134+
res += consistencyEdgesExternal
135+
}
131136
if !allVPCs {
132137
res += strings.ReplaceAll(strings.Join(vpcIDs, ""), ":", "")
133138
}
@@ -174,9 +179,10 @@ func (tt *VpcTestCommon) initTest() {
174179
}
175180

176181
func (tt *VpcTestCommon) initTestFileNames(uc vpcmodel.OutputUseCase,
177-
vpcName string, allVPCs, detailExplain bool, testDirOut string, grouping, noLbAbstract bool) error {
182+
vpcName string, allVPCs, detailExplain bool, testDirOut string, grouping, noLbAbstract,
183+
addConsistencyEdgesExternal bool) error {
178184
expectedFileName, actualFileName, err := getTestFileName(
179-
tt.Name, uc, grouping, noLbAbstract, detailExplain, tt.Format, vpcName, allVPCs, tt.VpcList)
185+
tt.Name, uc, grouping, noLbAbstract, detailExplain, addConsistencyEdgesExternal, tt.Format, vpcName, allVPCs, tt.VpcList)
180186
if err != nil {
181187
return err
182188
}
@@ -191,17 +197,23 @@ func (tt *VpcTestCommon) runTestPerUseCase(t *testing.T,
191197
uc vpcmodel.OutputUseCase,
192198
mode testMode,
193199
outDir string,
194-
grouping, noLbAbstract bool,
200+
groupingType int,
201+
noLbAbstract bool,
195202
explanationArgs *vpcmodel.ExplanationArgs) error {
196203
detailExplain := false
197204
if explanationArgs != nil {
198205
detailExplain = explanationArgs.Detail
199206
}
200207
allVpcs := len(tt.VpcList) == 0
201-
if err := tt.initTestFileNames(uc, "", allVpcs, detailExplain, outDir, grouping, noLbAbstract); err != nil {
208+
grouping := groupingType == vpcmodel.GroupingNoConsistencyEdges ||
209+
groupingType == vpcmodel.GroupingWithConsistencyEdges
210+
addConsistencyEdgesExternal := groupingType == vpcmodel.NoGroupingWithConsistencyEdges ||
211+
groupingType == vpcmodel.GroupingWithConsistencyEdges
212+
if err := tt.initTestFileNames(uc, "", allVpcs, detailExplain, outDir, grouping, noLbAbstract,
213+
addConsistencyEdgesExternal); err != nil {
202214
return err
203215
}
204-
og, err := vpcmodel.NewOutputGenerator(cConfigs, grouping, uc, tt.Format == vpcmodel.ARCHDRAWIO,
216+
og, err := vpcmodel.NewOutputGenerator(cConfigs, groupingType, uc, tt.Format == vpcmodel.ARCHDRAWIO,
205217
explanationArgs, tt.Format, !noLbAbstract)
206218
if err != nil {
207219
return err
@@ -326,7 +338,7 @@ func (tt *VpcTestCommon) setMode(mode testMode) {
326338
}
327339

328340
func (tt *VpcTestCommon) runSingleCommonTest(t *testing.T, testDir string, rc commonvpc.ResourcesContainer,
329-
grouping, noLbAbstract bool, explanationArgs *vpcmodel.ExplanationArgs) {
341+
groupingType int, noLbAbstract bool, explanationArgs *vpcmodel.ExplanationArgs) {
330342
// init test - set the input/output file names according to test name
331343
tt.initTest()
332344

@@ -335,7 +347,8 @@ func (tt *VpcTestCommon) runSingleCommonTest(t *testing.T, testDir string, rc co
335347

336348
// generate actual output for all use cases specified for this test
337349
for _, uc := range tt.UseCases {
338-
err := tt.runTestPerUseCase(t, vpcConfigs, uc, tt.Mode, testDir, grouping, noLbAbstract, explanationArgs)
350+
err := tt.runTestPerUseCase(t, vpcConfigs, uc, tt.Mode, testDir, groupingType, noLbAbstract,
351+
explanationArgs)
339352
require.Equal(t, tt.ErrPerUseCase[uc], err, "comparing actual err to expected err")
340353
}
341354
for uc, outFile := range tt.ActualOutput {

pkg/commonvpc/testfunc/explain_test_functionality.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ func (tt *VpcExplainTest) TestSingleExplain(t *testing.T, mode testMode, rc comm
4242
tt.Format = vpcmodel.Text
4343
t.Run(tt.Name, func(t *testing.T) {
4444
t.Parallel()
45-
tt.runSingleCommonTest(t, explainOut, rc, false, false, explanationArgs)
45+
tt.runSingleCommonTest(t, explainOut, rc, vpcmodel.NoGroupingNoConsistencyEdges, false, explanationArgs)
4646
})
4747
}

pkg/commonvpc/testfunc/semantic_diff_test_functionality.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/stretchr/testify/require"
1515

1616
"github.com/np-guard/vpc-network-config-analyzer/pkg/commonvpc"
17+
"github.com/np-guard/vpc-network-config-analyzer/pkg/vpcmodel"
1718
)
1819

1920
const secJSONOutSuffix = "_2nd.json"
@@ -44,7 +45,8 @@ func (tt *VpcDiffTest) runDiffSingleTest(t *testing.T, testDir string, rc common
4445

4546
// generate actual output for all use cases specified for this test
4647
for _, uc := range tt.UseCases {
47-
err := tt.runTestPerUseCase(t, vpcConfigs, uc, tt.Mode, testDir, false, false, nil)
48+
err := tt.runTestPerUseCase(t, vpcConfigs, uc, tt.Mode, testDir, vpcmodel.NoGroupingNoConsistencyEdges, false,
49+
nil)
4850
require.Equal(t, tt.ErrPerUseCase[uc], err, "comparing diff's actual err to expected err")
4951
}
5052
for uc, outFile := range tt.ActualOutput {

0 commit comments

Comments
 (0)