|
@@ -145,6 +145,10 @@ func runChainTests(t *testing.T, ipt *IPTables) {
|
|
|
if err == nil {
|
|
|
t.Fatalf("DeleteChain of non-empty chain did not fail")
|
|
|
}
|
|
|
+ e, ok := err.(*Error)
|
|
|
+ if ok && e.IsNotExist() {
|
|
|
+ t.Fatal("DeleteChain of non-empty chain returned IsNotExist")
|
|
|
+ }
|
|
|
|
|
|
err = ipt.ClearChain("filter", chain)
|
|
|
if err != nil {
|
|
@@ -342,3 +346,65 @@ func TestError(t *testing.T) {
|
|
|
t.Fatalf("expected type os.PathError, got %t", e)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestIsNotExist(t *testing.T) {
|
|
|
+ ipt, err := New()
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("failed to init: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ chainName := randChain(t)
|
|
|
+ err = ipt.NewChain("filter", chainName)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ ipt.ClearChain("filter", chainName)
|
|
|
+ ipt.DeleteChain("filter", chainName)
|
|
|
+ }()
|
|
|
+
|
|
|
+ err = ipt.Append("filter", chainName, "-p", "tcp", "-j", "DROP")
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ err = ipt.Delete("filter", chainName, "-p", "tcp", "-j", "DROP")
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = ipt.Delete("filter", chainName, "-p", "tcp", "-j", "DROP")
|
|
|
+ if err == nil {
|
|
|
+ t.Fatal("delete twice got no error...")
|
|
|
+ }
|
|
|
+
|
|
|
+ e, ok := err.(*Error)
|
|
|
+ if !ok {
|
|
|
+ t.Fatalf("Got wrong error type, expected iptables.Error, got %T", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if !e.IsNotExist() {
|
|
|
+ t.Fatal("IsNotExist returned false, expected true")
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ err = ipt.DeleteChain("filter", chainName)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = ipt.DeleteChain("filter", chainName)
|
|
|
+ if err == nil {
|
|
|
+ t.Fatal("deletechain twice got no error...")
|
|
|
+ }
|
|
|
+
|
|
|
+ e, ok = err.(*Error)
|
|
|
+ if !ok {
|
|
|
+ t.Fatalf("Got wrong error type, expected iptables.Error, got %T", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if !e.IsNotExist() {
|
|
|
+ t.Fatal("IsNotExist returned false, expected true")
|
|
|
+ }
|
|
|
+}
|