bridge: simplify version-based testcase code

Signed-off-by: Dan Williams <dcbw@redhat.com>
This commit is contained in:
Dan Williams 2021-01-27 09:42:01 -06:00
parent 8c25db87b1
commit c8f341dff9

View File

@ -350,33 +350,40 @@ func checkVlan(vlanId int, bridgeVlanInfo []*nl.BridgeVlanInfo) bool {
}
type cmdAddDelTester interface {
setNS(testNS ns.NetNS, targetNS ns.NetNS)
cmdAddTest(tc testCase, dataDir string) (types.Result, error)
cmdCheckTest(tc testCase, conf *Net, dataDir string)
cmdDelTest(tc testCase, dataDir string)
}
func testerByVersion(version string) cmdAddDelTester {
switch {
case strings.HasPrefix(version, "0.4."):
return &testerV04x{}
case strings.HasPrefix(version, "0.3."):
return &testerV03x{}
default:
return &testerV01xOr02x{}
}
}
type testerV04x struct {
type testerBase struct {
testNS ns.NetNS
targetNS ns.NetNS
args *skel.CmdArgs
vethName string
}
func (tester *testerV04x) setNS(testNS ns.NetNS, targetNS ns.NetNS) {
tester.testNS = testNS
tester.targetNS = targetNS
type testerV04x testerBase
type testerV03x testerBase
type testerV01xOr02x testerBase
func newTesterByVersion(version string, testNS, targetNS ns.NetNS) cmdAddDelTester {
switch {
case strings.HasPrefix(version, "0.4."):
return &testerV04x{
testNS: testNS,
targetNS: targetNS,
}
case strings.HasPrefix(version, "0.3."):
return &testerV03x{
testNS: testNS,
targetNS: targetNS,
}
default:
return &testerV01xOr02x{
testNS: testNS,
targetNS: targetNS,
}
}
}
func (tester *testerV04x) cmdAddTest(tc testCase, dataDir string) (types.Result, error) {
@ -625,18 +632,6 @@ func (tester *testerV04x) cmdDelTest(tc testCase, dataDir string) {
Expect(err).NotTo(HaveOccurred())
}
type testerV03x struct {
testNS ns.NetNS
targetNS ns.NetNS
args *skel.CmdArgs
vethName string
}
func (tester *testerV03x) setNS(testNS ns.NetNS, targetNS ns.NetNS) {
tester.testNS = testNS
tester.targetNS = targetNS
}
func (tester *testerV03x) cmdAddTest(tc testCase, dataDir string) (types.Result, error) {
// Generate network config and command arguments
tester.args = tc.createCmdArgs(tester.targetNS, dataDir)
@ -861,18 +856,6 @@ func (tester *testerV03x) cmdDelTest(tc testCase, dataDir string) {
Expect(err).NotTo(HaveOccurred())
}
type testerV01xOr02x struct {
testNS ns.NetNS
targetNS ns.NetNS
args *skel.CmdArgs
vethName string
}
func (tester *testerV01xOr02x) setNS(testNS ns.NetNS, targetNS ns.NetNS) {
tester.testNS = testNS
tester.targetNS = targetNS
}
func (tester *testerV01xOr02x) cmdAddTest(tc testCase, dataDir string) (types.Result, error) {
// Generate network config and calculate gateway addresses
tester.args = tc.createCmdArgs(tester.targetNS, dataDir)
@ -997,13 +980,11 @@ func (tester *testerV01xOr02x) cmdDelTest(tc testCase, dataDir string) {
}
func cmdAddDelTest(testNS ns.NetNS, tc testCase, dataDir string) {
// Get a Add/Del tester based on test case version
tester := testerByVersion(tc.cniVersion)
targetNS, err := testutils.NewNS()
Expect(err).NotTo(HaveOccurred())
defer targetNS.Close()
tester.setNS(testNS, targetNS)
tester := newTesterByVersion(tc.cniVersion, testNS, targetNS)
// Test IP allocation
result, err := tester.cmdAddTest(tc, dataDir)
@ -1069,13 +1050,11 @@ func buildOneConfig(name, cniVersion string, orig *Net, prevResult types.Result)
func cmdAddDelCheckTest(testNS ns.NetNS, tc testCase, dataDir string) {
Expect(tc.cniVersion).To(Equal("0.4.0"))
// Get a Add/Del tester based on test case version
tester := testerByVersion(tc.cniVersion)
targetNS, err := testutils.NewNS()
Expect(err).NotTo(HaveOccurred())
defer targetNS.Close()
tester.setNS(testNS, targetNS)
tester := newTesterByVersion(tc.cniVersion, testNS, targetNS)
// Test IP allocation
prevResult, err := tester.cmdAddTest(tc, dataDir)
@ -1331,11 +1310,14 @@ var _ = Describe("bridge Operations", func() {
expGWCIDRs: []string{"10.1.2.1/24"},
}
tester := testerV03x{}
targetNS, err := testutils.NewNS()
Expect(err).NotTo(HaveOccurred())
defer targetNS.Close()
tester.setNS(originalNS, targetNS)
tester := testerV03x{
testNS: originalNS,
targetNS: targetNS,
}
tester.args = tc.createCmdArgs(targetNS, dataDir)
// Execute cmdDEL on the plugin, expect no errors