// Copyright 2016-2020, Pulumi Corporation. All rights reserved. package ints import ( "encoding/json" "fmt" "os" "strings" "testing" "time" ptesting "github.com/pulumi/pulumi/pkg/testing" ) // TestPolicy tests policy related commands work. func TestPolicy(t *testing.T) { e := ptesting.NewEnvironment(t) defer func() { if !t.Failed() { e.DeleteEnvironment() } }() // Confirm we have credentials. if os.Getenv("PULUMI_ACCESS_TOKEN") == "" { t.Fatal("PULUMI_ACCESS_TOKEN not found, aborting tests.") } name, _ := e.RunCommand("pulumi", "whoami") orgName := strings.TrimSpace(name) // Pack and push a Policy Pack for the organization. policyPackName := fmt.Sprintf("%s-%x", "test-policy-pack", time.Now().UnixNano()) e.ImportDirectory("test_policy_pack") e.RunCommand("yarn", "install") os.Setenv("TEST_POLICY_PACK", policyPackName) // Publish the Policy Pack twice. e.RunCommand("pulumi", "policy", "publish", orgName) e.RunCommand("pulumi", "policy", "publish", orgName) // Check the policy ls commands. packsOutput, _ := e.RunCommand("pulumi", "policy", "ls", "--json") var packs []policyPacksJSON assertJSON(e, packsOutput, &packs) groupsOutput, _ := e.RunCommand("pulumi", "policy", "group", "ls", "--json") var groups []policyGroupsJSON assertJSON(e, groupsOutput, &groups) // Enable, Disable and then Delete the Policy Pack. e.RunCommand("pulumi", "policy", "enable", fmt.Sprintf("%s/%s", orgName, policyPackName), "1") e.RunCommand("pulumi", "policy", "disable", fmt.Sprintf("%s/%s", orgName, policyPackName), "--version=1") // Enable and Disable without specifying the version number. e.RunCommand("pulumi", "policy", "enable", fmt.Sprintf("%s/%s", orgName, policyPackName), "latest") e.RunCommand("pulumi", "policy", "disable", fmt.Sprintf("%s/%s", orgName, policyPackName)) e.RunCommand("pulumi", "policy", "rm", fmt.Sprintf("%s/%s", orgName, policyPackName), "1") e.RunCommand("pulumi", "policy", "rm", fmt.Sprintf("%s/%s", orgName, policyPackName), "all") } type policyPacksJSON struct { Name string `json:"name"` Versions []int `json:"versions"` } type policyGroupsJSON struct { Name string `json:"name"` Default bool `json:"default"` NumPolicyPacks int `json:"numPolicyPacks"` NumStacks int `json:"numStacks"` } func assertJSON(e *ptesting.Environment, out string, respObj interface{}) { err := json.Unmarshal([]byte(out), &respObj) if err != nil { e.Errorf("unable to unmarshal %v", out) } }