pkg: add a function to generate chain names
authorAbhishek Chanda <abhishek.becs@gmail.com>
Wed, 23 Mar 2016 00:16:59 +0000 (17:16 -0700)
committerStefan Junker <mail@stefanjunker.de>
Thu, 31 Mar 2016 16:01:32 +0000 (18:01 +0200)
Adds a function to generate chain names for use in iptables and
ports all drivers to use that function. Also adds tests for the
said function.

utils/utils.go [new file with mode: 0644]
utils/utils_suite_test.go [new file with mode: 0644]
utils/utils_test.go [new file with mode: 0644]

diff --git a/utils/utils.go b/utils/utils.go
new file mode 100644 (file)
index 0000000..eaf48d0
--- /dev/null
@@ -0,0 +1,20 @@
+package utils
+
+import (
+       "crypto/sha512"
+       "fmt"
+)
+
+// 29 - len('CNI') - 2*len('-')
+const maxNameLen = 16
+
+// Generates a chain name to be used with iptables.
+// Ensures that the generated name is less than
+// 29 chars in length
+func FormatChainName(name string, id string) string {
+       h := sha512.Sum512([]byte(id))
+       if len(name) > maxNameLen {
+               return fmt.Sprintf("CNI-%s-%x", name[:len(name)-maxNameLen], h[:8])
+       }
+       return fmt.Sprintf("CNI-%s-%x", name, h[:8])
+}
diff --git a/utils/utils_suite_test.go b/utils/utils_suite_test.go
new file mode 100644 (file)
index 0000000..f160db6
--- /dev/null
@@ -0,0 +1,13 @@
+package utils_test
+
+import (
+       . "github.com/onsi/ginkgo"
+       . "github.com/onsi/gomega"
+
+       "testing"
+)
+
+func TestUtils(t *testing.T) {
+       RegisterFailHandler(Fail)
+       RunSpecs(t, "Utils Suite")
+}
diff --git a/utils/utils_test.go b/utils/utils_test.go
new file mode 100644 (file)
index 0000000..e9b9f9b
--- /dev/null
@@ -0,0 +1,18 @@
+package utils
+
+import (
+       . "github.com/onsi/ginkgo"
+       . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Utils", func() {
+       It("should format a short name", func() {
+               chain := FormatChainName("test", "1234")
+               Expect(chain).To(Equal("CNI-test-d404559f602eab6f"))
+       })
+
+       It("should truncate a long name", func() {
+               chain := FormatChainName("testalongnamethatdoesnotmakesense", "1234")
+               Expect(chain).To(Equal("CNI-testalongnamethat-d404559f602eab6f"))
+       })
+})