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  }