github.com/go-chef/chef@v0.30.1/policy_test.go (about) 1 package chef 2 3 import ( 4 "fmt" 5 "net/http" 6 "os" 7 "testing" 8 ) 9 10 const policyListResponseFile = "test/policies_response.json" 11 const policyRevisionResponseFile = "test/policy_revision_response.json" 12 13 func TestListPolicies(t *testing.T) { 14 setup() 15 defer teardown() 16 17 file, err := os.ReadFile(policyListResponseFile) 18 if err != nil { 19 t.Error(err) 20 } 21 22 mux.HandleFunc("/policies", func(w http.ResponseWriter, r *http.Request) { 23 fmt.Fprintf(w, string(file)) 24 }) 25 26 data, err := client.Policies.List() 27 if err != nil { 28 t.Error(err) 29 } 30 31 if data == nil { 32 t.Fatal("We should have some data") 33 } 34 35 if len(data) != 2 { 36 t.Error("Mismatch in expected policies count. Expected 2, Got: ", len(data)) 37 } 38 39 if _, ok := data["aar"]; !ok { 40 t.Error("aar policy should be listed") 41 } 42 43 if _, ok := data["jenkins"]; !ok { 44 t.Error("jenkins policy should be listed") 45 } 46 47 } 48 49 func TestGetPolicy(t *testing.T) { 50 setup() 51 defer teardown() 52 53 policyGetJSON := `{ 54 "revisions": { 55 "8228b0e381fe1de3ee39bf51e93029dbbdcecc61fb5abea4ca8c82591c0b529b": { 56 57 } 58 } 59 }` 60 mux.HandleFunc("/policies/base", func(w http.ResponseWriter, r *http.Request) { 61 fmt.Fprintf(w, policyGetJSON) 62 }) 63 mux.HandleFunc("/policies/bad", func(w http.ResponseWriter, r *http.Request) { 64 http.Error(w, "Not Found", 404) 65 }) 66 67 data, err := client.Policies.Get("base") 68 if err != nil { 69 t.Error(err) 70 } 71 72 if _, ok := data["revisions"]["8228b0e381fe1de3ee39bf51e93029dbbdcecc61fb5abea4ca8c82591c0b529b"]; !ok { 73 t.Error("Missing expected revision for this policy") 74 } 75 76 _, err = client.Policies.Get("bad") 77 if err == nil { 78 t.Error("We expected this bad request to error", err) 79 } 80 } 81 82 func TestGetPolicyRevision(t *testing.T) { 83 setup() 84 defer teardown() 85 86 const policyName = "base" 87 const policyRevision = "8228b0e381fe1de3ee39bf51e93029dbbdcecc61fb5abea4ca8c82591c0b529b" 88 89 file, err := os.ReadFile(policyRevisionResponseFile) 90 if err != nil { 91 t.Error(err) 92 } 93 94 mux.HandleFunc(fmt.Sprintf("/policies/%s/revisions/%s", policyName, policyRevision), func(w http.ResponseWriter, r *http.Request) { 95 fmt.Fprintf(w, string(file)) 96 }) 97 98 data, err := client.Policies.GetRevisionDetails(policyName, policyRevision) 99 if err != nil { 100 t.Error(err) 101 } 102 103 if data.Name != policyName { 104 t.Errorf("Unexpected policy name: %+v", data.Name) 105 } 106 107 if data.RevisionID != policyRevision { 108 t.Errorf("Unexpected policy revision ID: %+v", data.RevisionID) 109 } 110 111 if data.RunList[0] != "recipe[base::default]" { 112 t.Errorf("Unexpected policy run list: %+v", data.RevisionID) 113 } 114 115 if val, ok := data.NamedRunList["os"]; !ok { 116 t.Error("Expected os NamedRunList policy to be present in the policy information") 117 } else if val[0] != "recipe[hardening::default]" { 118 t.Error("Expected named run list for the policy, got: ", val[0]) 119 } 120 121 if data.IncludedPolicyLocks[0].Name != "other" { 122 t.Error("Expected included policy name to be present in the policy information") 123 } else if data.IncludedPolicyLocks[0].RevisionID != "7b40995ad1150ec56950c757872d6732aa00e76382dfcd2fddeb3a971e57ba9c" { 124 t.Error("Expected included policy revision ID to be present in the policy information") 125 } 126 127 if val, ok := data.CookbookLocks["hardening"]; !ok { 128 t.Error("Expected hardening policy to be present in the policy information") 129 } else if val.Version != "0.1.0" { 130 t.Error("Expected hardening policy version to be 0.1.0, got: ", val.Version) 131 } 132 133 } 134 135 func TestDeletePolicyRevision(t *testing.T) { 136 setup() 137 defer teardown() 138 139 const policyName = "base" 140 const policyRevision = "8228b0e381fe1de3ee39bf51e93029dbbdcecc61fb5abea4ca8c82591c0b529b" 141 142 file, err := os.ReadFile(policyRevisionResponseFile) 143 if err != nil { 144 t.Error(err) 145 } 146 147 mux.HandleFunc(fmt.Sprintf("/policies/%s/revisions/%s", policyName, policyRevision), func(w http.ResponseWriter, r *http.Request) { 148 fmt.Fprintf(w, string(file)) 149 }) 150 151 data, err := client.Policies.DeleteRevision(policyName, policyRevision) 152 if err != nil { 153 t.Error(err) 154 } 155 156 if data.Name != policyName { 157 t.Errorf("Unexpected policy name: %+v", data.Name) 158 } 159 160 if data.RevisionID != policyRevision { 161 t.Errorf("Unexpected policy revision ID: %+v", data.RevisionID) 162 } 163 }