Skip to content

Commit 6da74ec

Browse files
committed
Changes around environment variables
1. SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS is passed from secrets 2. Added SUMOLOGIC_ENABLE_GCP_METRICS_ACC_TESTS -- i.e. ignore Gcp Metrics tests if this variable is set to false 3. Removed SUMOLOGIC_GOOGLE_APPLICATION_CREDENTIALS variable 4. Added SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS variable Note: New variable SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS is treated as content of the service_account json (not path to file), this should help keep things more secure.
1 parent 5364058 commit 6da74ec

File tree

3 files changed

+88
-77
lines changed

3 files changed

+88
-77
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ jobs:
9191
SUMOLOGIC_ENVIRONMENT: ${{ secrets.SUMOLOGIC_ENVIRONMENT }}
9292
SUMOLOGIC_TEST_BUCKET_NAME: ${{ secrets.SUMOLOGIC_TEST_BUCKET_NAME }}
9393
SUMOLOGIC_TEST_ROLE_ARN: ${{ secrets.SUMOLOGIC_TEST_ROLE_ARN }}
94+
SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS }}
9495

9596
# disable go test timeout. We rely on GitHub action timeout.
9697
run: |

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ Then run `terraform init` to initialize it.
5353

5454
In order to run the full suite of Acceptance tests, run `make testacc`.
5555

56-
*Note:* Acceptance tests *create real resources*, and often cost money to run. The environment variables `SUMOLOGIC_ACCESSID`, `SUMOLOGIC_ACCESSKEY`, and `SUMOLOGIC_ENVIRONMENT` must also be set for acceptance tests to work properly.
56+
*Note:*
57+
- Acceptance tests *create real resources*, and often cost money to run. The environment variables `SUMOLOGIC_ACCESSID`, `SUMOLOGIC_ACCESSKEY`, and `SUMOLOGIC_ENVIRONMENT` must also be set for acceptance tests to work properly.
58+
- Environment variable `SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS` must be set for gcp metrics acceptance tests to work properly (ex. below).
59+
- export SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS=`cat /path/to/service_acccount.json`
60+
- Set Environment variable `SUMOLOGIC_ENABLE_GCP_METRICS_ACC_TESTS` to false, to disable acceptance test for Gcp Metrics.
5761

5862
[0]: https://help.sumologic.com/Manage/Security/Access-Keys
5963
[1]: https://help.sumologic.com/APIs/General_API_Information/Sumo_Logic_Endpoints_and_Firewall_Security

sumologic/resource_sumologic_gcp_metrics_source_test.go

Lines changed: 82 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,92 @@ package sumologic
33
import (
44
"encoding/json"
55
"fmt"
6-
"io/ioutil"
76
"os"
87
"strconv"
8+
"strings"
99
"testing"
1010

1111
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1212
"github.com/hashicorp/terraform-plugin-sdk/terraform"
1313
)
1414

15+
func shouldTestGcpMetricsSource() bool {
16+
return !strings.EqualFold(os.Getenv("SUMOLOGIC_ENABLE_GCP_METRICS_ACC_TESTS"), "false")
17+
}
18+
1519
func TestAccSumologicGcpMetricsSource_create(t *testing.T) {
16-
var GcpMetricsSource PollingSource
17-
var collector Collector
18-
cName, cDescription, cCategory := getRandomizedParams()
19-
sName, sDescription, sCategory := getRandomizedParams()
20-
GcpMetricsResourceName := "sumologic_gcp_metrics_source.gcp_metrics_source"
21-
resource.Test(t, resource.TestCase{
22-
PreCheck: func() { getServiceAccountCreds(t) },
23-
Providers: testAccProviders,
24-
CheckDestroy: testAccCheckGcpMetricsSourceDestroy,
25-
Steps: []resource.TestStep{
26-
{
27-
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sName, sDescription, sCategory),
28-
Check: resource.ComposeTestCheckFunc(
29-
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
30-
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sName, sDescription, sCategory),
31-
testAccCheckCollectorExists("sumologic_collector.test", &collector),
32-
testAccCheckCollectorValues(&collector, cName, cDescription, cCategory, "Etc/UTC", ""),
33-
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
34-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sName),
35-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescription),
36-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategory),
37-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
38-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
39-
),
20+
if shouldTestGcpMetricsSource() {
21+
var GcpMetricsSource PollingSource
22+
var collector Collector
23+
cName, cDescription, cCategory := getRandomizedParams()
24+
sName, sDescription, sCategory := getRandomizedParams()
25+
GcpMetricsResourceName := "sumologic_gcp_metrics_source.gcp_metrics_source"
26+
resource.Test(t, resource.TestCase{
27+
PreCheck: func() { getServiceAccountCreds(t) },
28+
Providers: testAccProviders,
29+
CheckDestroy: testAccCheckGcpMetricsSourceDestroy,
30+
Steps: []resource.TestStep{
31+
{
32+
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sName, sDescription, sCategory),
33+
Check: resource.ComposeTestCheckFunc(
34+
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
35+
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sName, sDescription, sCategory),
36+
testAccCheckCollectorExists("sumologic_collector.test", &collector),
37+
testAccCheckCollectorValues(&collector, cName, cDescription, cCategory, "Etc/UTC", ""),
38+
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
39+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sName),
40+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescription),
41+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategory),
42+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
43+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
44+
),
45+
},
4046
},
41-
},
42-
})
47+
})
48+
}
4349
}
4450

4551
func TestAccSumologicGcpMetricsSource_update(t *testing.T) {
46-
var GcpMetricsSource PollingSource
47-
cName, cDescription, cCategory := getRandomizedParams()
48-
sName, sDescription, sCategory := getRandomizedParams()
49-
sNameUpdated, sDescriptionUpdated, sCategoryUpdated := getRandomizedParams()
50-
GcpMetricsResourceName := "sumologic_gcp_metrics_source.gcp_metrics_source"
51-
resource.Test(t, resource.TestCase{
52-
PreCheck: func() { getServiceAccountCreds(t) },
53-
Providers: testAccProviders,
54-
CheckDestroy: testAccCheckHTTPSourceDestroy,
55-
Steps: []resource.TestStep{
56-
{
57-
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sName, sDescription, sCategory),
58-
Check: resource.ComposeTestCheckFunc(
59-
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
60-
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sName, sDescription, sCategory),
61-
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
62-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sName),
63-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescription),
64-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategory),
65-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
66-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
67-
),
68-
},
69-
{
70-
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sNameUpdated, sDescriptionUpdated, sCategoryUpdated),
71-
Check: resource.ComposeTestCheckFunc(
72-
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
73-
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sNameUpdated, sDescriptionUpdated, sCategoryUpdated),
74-
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
75-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sNameUpdated),
76-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescriptionUpdated),
77-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategoryUpdated),
78-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
79-
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
80-
),
52+
if shouldTestGcpMetricsSource() {
53+
var GcpMetricsSource PollingSource
54+
cName, cDescription, cCategory := getRandomizedParams()
55+
sName, sDescription, sCategory := getRandomizedParams()
56+
sNameUpdated, sDescriptionUpdated, sCategoryUpdated := getRandomizedParams()
57+
GcpMetricsResourceName := "sumologic_gcp_metrics_source.gcp_metrics_source"
58+
resource.Test(t, resource.TestCase{
59+
PreCheck: func() { getServiceAccountCreds(t) },
60+
Providers: testAccProviders,
61+
CheckDestroy: testAccCheckHTTPSourceDestroy,
62+
Steps: []resource.TestStep{
63+
{
64+
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sName, sDescription, sCategory),
65+
Check: resource.ComposeTestCheckFunc(
66+
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
67+
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sName, sDescription, sCategory),
68+
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
69+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sName),
70+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescription),
71+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategory),
72+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
73+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
74+
),
75+
},
76+
{
77+
Config: testAccSumologicGcpMetricsSourceConfig(t, cName, cDescription, cCategory, sNameUpdated, sDescriptionUpdated, sCategoryUpdated),
78+
Check: resource.ComposeTestCheckFunc(
79+
testAccCheckGcpMetricsSourceExists(GcpMetricsResourceName, &GcpMetricsSource),
80+
testAccCheckGcpMetricsSourceValues(&GcpMetricsSource, sNameUpdated, sDescriptionUpdated, sCategoryUpdated),
81+
resource.TestCheckResourceAttrSet(GcpMetricsResourceName, "id"),
82+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "name", sNameUpdated),
83+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "description", sDescriptionUpdated),
84+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "category", sCategoryUpdated),
85+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "content_type", "GcpMetrics"),
86+
resource.TestCheckResourceAttr(GcpMetricsResourceName, "path.0.type", "GcpMetricsPath"),
87+
),
88+
},
8189
},
82-
},
83-
})
90+
})
91+
}
8492
}
8593

8694
func testAccCheckGcpMetricsSourceDestroy(s *terraform.State) error {
@@ -169,23 +177,21 @@ type ServiceAccountCreds struct {
169177
func getServiceAccountCreds(t *testing.T) ServiceAccountCreds {
170178
var err error
171179
contentBytes := []byte("")
172-
serviceAccountDetailsFileEnvName := "SUMOLOGIC_GOOGLE_APPLICATION_CREDENTIALS"
180+
serviceAccountDetailsJsonEnvName := "SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS"
173181

174-
serviceAccountDetailsFile, isEnvVarDefined := os.LookupEnv(serviceAccountDetailsFileEnvName)
182+
serviceAccountDetailsJson, isEnvVarDefined := os.LookupEnv(serviceAccountDetailsJsonEnvName)
175183
if !isEnvVarDefined {
176-
t.Fatal(fmt.Sprintf("Environment variable %#v has to be defined", serviceAccountDetailsFileEnvName))
177-
} else if len(serviceAccountDetailsFile) == 0 {
178-
t.Fatal(fmt.Sprintf("Environment variable %#v can not be empty string", serviceAccountDetailsFileEnvName))
179-
} else if _, statErr := os.Stat(serviceAccountDetailsFile); statErr != nil {
180-
t.Fatal(fmt.Sprintf("Environment variable %#v points to non-existing file %#v", serviceAccountDetailsFileEnvName, serviceAccountDetailsFile))
181-
} else {
182-
contentBytes, err = ioutil.ReadFile(serviceAccountDetailsFile)
184+
t.Fatal(fmt.Sprintf("Environment variable %#v has to be defined", serviceAccountDetailsJsonEnvName))
185+
} else if len(serviceAccountDetailsJson) == 0 {
186+
t.Fatal(fmt.Sprintf("Environment variable %#v can not be empty string", serviceAccountDetailsJsonEnvName))
183187
}
188+
189+
contentBytes = []byte(serviceAccountDetailsJson)
190+
var serviceAccountCreds ServiceAccountCreds
191+
err = json.Unmarshal(contentBytes, &serviceAccountCreds)
184192
if err != nil {
185-
t.Fatal(fmt.Sprintf("Failed to read %#v", serviceAccountDetailsFile))
193+
t.Fatal(fmt.Sprintf("Failed to parse content pointed by environment variable %#v", serviceAccountDetailsJsonEnvName))
186194
}
187-
var serviceAccountCreds ServiceAccountCreds
188-
json.Unmarshal(contentBytes, &serviceAccountCreds)
189195
return serviceAccountCreds
190196
}
191197

0 commit comments

Comments
 (0)