-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve json to edgeos conversions (#5)
* Tidy go mod * Fix type output in error message * Force consistent map key ordering * Test more cases * Refactor kv writing * Support multiple values for the same key * Support numbers * Support boolean values
- Loading branch information
Showing
4 changed files
with
225 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,6 @@ | ||
package edgeos_test | ||
|
||
import ( | ||
"fmt" | ||
"strings" | ||
"testing" | ||
|
||
|
@@ -10,28 +9,141 @@ import ( | |
"github.com/stretchr/testify/require" | ||
) | ||
|
||
func init() { | ||
edgeos.ForceConsistentMapOrdering = true | ||
} | ||
|
||
type SM = map[string]interface{} | ||
|
||
func TestMapConversion(t *testing.T) { | ||
in := SM{ | ||
"smart-queue internal": SM{ | ||
"download": SM{ | ||
"rate": "39mbit", | ||
testCases := map[string]struct { | ||
in map[string]interface{} | ||
out string | ||
}{ | ||
"smart queue": { | ||
in: SM{ | ||
"smart-queue internal": SM{ | ||
"download": SM{ | ||
"rate": "39mbit", | ||
}, | ||
"wan-interface": "eth1.2", | ||
}, | ||
}, | ||
"wan-interface": "eth1.2", | ||
}, | ||
} | ||
|
||
out := &strings.Builder{} | ||
err := edgeos.ConfigFromMap(out, in, 0) | ||
require.NoError(t, err) | ||
|
||
fmt.Println(out.String()) | ||
assert.Equal(t, `smart-queue internal { | ||
out: `smart-queue internal { | ||
download { | ||
rate 39mbit | ||
} | ||
wan-interface eth1.2 | ||
} | ||
`, out.String()) | ||
`, | ||
}, | ||
"quoted values": { | ||
in: SM{ | ||
"ethernet eth0": SM{ | ||
"description": "Some interface doing something", | ||
}, | ||
}, | ||
out: `ethernet eth0 { | ||
description "Some interface doing something" | ||
} | ||
`, | ||
}, | ||
"multivalue": { | ||
in: SM{ | ||
"interfaces": SM{ | ||
"ethernet eth1": SM{ | ||
"address": []interface{}{"10.1.0.1/16", "fde4:4d90:9ebf::1/64"}, | ||
}, | ||
}, | ||
}, | ||
out: `interfaces { | ||
ethernet eth1 { | ||
address 10.1.0.1/16 | ||
address fde4:4d90:9ebf::1/64 | ||
} | ||
} | ||
`, | ||
}, | ||
"numbers": { | ||
in: SM{ | ||
"protocols": SM{ | ||
"bgp 207871": SM{ | ||
"maximum-paths": SM{ | ||
"ibgp": 2, | ||
}, | ||
}, | ||
}, | ||
}, | ||
out: `protocols { | ||
bgp 207871 { | ||
maximum-paths { | ||
ibgp 2 | ||
} | ||
} | ||
} | ||
`, | ||
}, | ||
"multivalue numbers": { | ||
in: SM{ | ||
"snmp": SM{ | ||
"community public": SM{ | ||
"authorization": "ro", | ||
}, | ||
"contact": "[email protected]", | ||
"listen-address 2001:678:b7c::3": SM{ | ||
"port": []interface{}{161, "345"}, | ||
}, | ||
}, | ||
}, | ||
out: `snmp { | ||
community public { | ||
authorization ro | ||
} | ||
contact [email protected] | ||
listen-address 2001:678:b7c::3 { | ||
port 161 | ||
port 345 | ||
} | ||
} | ||
`, | ||
}, | ||
"booleans": { | ||
in: SM{ | ||
"ethernet eth3": SM{ | ||
"disable": true, | ||
"duplex": "auto", | ||
"speed": "auto", | ||
}, | ||
}, | ||
out: `ethernet eth3 { | ||
disable | ||
duplex auto | ||
speed auto | ||
} | ||
`, | ||
}, | ||
"boolean off": { | ||
in: SM{ | ||
"ethernet eth3": SM{ | ||
"disable": false, | ||
"duplex": "auto", | ||
"speed": "auto", | ||
}, | ||
}, | ||
out: `ethernet eth3 { | ||
duplex auto | ||
speed auto | ||
} | ||
`, | ||
}, | ||
} | ||
|
||
for name, tc := range testCases { | ||
t.Run(name, func(t *testing.T) { | ||
out := &strings.Builder{} | ||
err := edgeos.ConfigFromMap(out, tc.in, 0) | ||
require.NoError(t, err) | ||
assert.Equal(t, tc.out, out.String()) | ||
}) | ||
} | ||
} |