Skip to content

Commit 2a17d96

Browse files
committed
UPSTREAM: 51782: A policy with 0 rules should return an error
:100644 100644 2fcce4da75... 195340ecbd... M staging/src/k8s.io/apiserver/pkg/audit/policy/reader.go :100644 100644 be76364f59... 3eabbd3cb3... M staging/src/k8s.io/apiserver/pkg/audit/policy/reader_test.go
1 parent 7a6d338 commit 2a17d96

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

staging/src/k8s.io/apiserver/pkg/audit/policy/reader.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ func LoadPolicyFromFile(filePath string) (*auditinternal.Policy, error) {
5454
return nil, err.ToAggregate()
5555
}
5656

57-
glog.V(4).Infof("Loaded %d audit policy rules from file %s\n", len(policy.Rules), filePath)
57+
policyCnt := len(policy.Rules)
58+
if policyCnt == 0 {
59+
return nil, fmt.Errorf("loaded illegal policy with 0 rules from file %s", filePath)
60+
}
61+
glog.V(4).Infof("Loaded %d audit policy rules from file %s", policyCnt, filePath)
5862
return policy, nil
5963
}

staging/src/k8s.io/apiserver/pkg/audit/policy/reader_test.go

+37-8
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,49 @@ var expectedPolicy = &audit.Policy{
6767
}
6868

6969
func TestParser(t *testing.T) {
70-
// Create a policy file.
71-
f, err := ioutil.TempFile("", "policy.yaml")
70+
f, err := writePolicy(policyDef, t)
7271
require.NoError(t, err)
73-
defer os.Remove(f.Name())
72+
defer os.Remove(f)
7473

75-
_, err = f.WriteString(policyDef)
76-
require.NoError(t, err)
77-
require.NoError(t, f.Close())
78-
79-
policy, err := LoadPolicyFromFile(f.Name())
74+
policy, err := LoadPolicyFromFile(f)
8075
require.NoError(t, err)
8176

8277
assert.Len(t, policy.Rules, 3) // Sanity check.
8378
if !reflect.DeepEqual(policy, expectedPolicy) {
8479
t.Errorf("Unexpected policy! Diff:\n%s", diff.ObjectDiff(policy, expectedPolicy))
8580
}
8681
}
82+
83+
func TestPolicyCntCheck(t *testing.T) {
84+
//a set of testCases
85+
var testCases = []struct {
86+
caseName, policy string
87+
}{
88+
{
89+
"policyWithNoRule",
90+
`apiVersion: audit.k8s.io/v1beta1
91+
kind: Policy`,
92+
},
93+
{"emptyPolicyFile", ""},
94+
}
95+
96+
for _, tc := range testCases {
97+
f, err := writePolicy(tc.policy, t)
98+
require.NoError(t, err)
99+
defer os.Remove(f)
100+
101+
_, err = LoadPolicyFromFile(f)
102+
assert.Error(t, err, "loaded illegal policy with 0 rules from testCase %s", tc.caseName)
103+
}
104+
}
105+
106+
func writePolicy(policy string, t *testing.T) (string, error) {
107+
f, err := ioutil.TempFile("", "policy.yaml")
108+
require.NoError(t, err)
109+
110+
_, err = f.WriteString(policy)
111+
require.NoError(t, err)
112+
require.NoError(t, f.Close())
113+
114+
return f.Name(), nil
115+
}

0 commit comments

Comments
 (0)