Skip to content

Commit a661a3e

Browse files
authored
Merge pull request #316 from SumoLogic/emichaeli-fix-user-and-role-data-sources-when-not-found
Fix provider crash for user and role data sources
2 parents 2e121c1 + 4a41a71 commit a661a3e

File tree

5 files changed

+90
-2
lines changed

5 files changed

+90
-2
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
## 2.12.0 (Unreleased)
22

3+
## 2.11.3 (November 17, 2021)
4+
5+
BUG FIXES:
6+
7+
* Fix provider crash when user / role data source is declared with a non-existent identifier (GH-316)
8+
39
## 2.11.2 (November 11, 2021)
410

511
ENHANCEMENTS:

sumologic/data_source_sumologic_role.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ func dataSourceSumologicRoleRead(d *schema.ResourceData, meta interface{}) error
5555
if err != nil {
5656
return fmt.Errorf("role with id %v not found: %v", id, err)
5757
}
58+
if role == nil {
59+
return fmt.Errorf("role with id %v not found", id)
60+
}
5861
} else {
5962
if rname, ok := d.GetOk("name"); ok {
6063
name := rname.(string)
@@ -97,6 +100,9 @@ func (s *Client) GetRoleName(name string) (*Role, error) {
97100
if err != nil {
98101
return nil, err
99102
}
103+
if len(response.Roles) == 0 {
104+
return nil, fmt.Errorf("role with name '%s' does not exist", name)
105+
}
100106

101107
return &response.Roles[0], nil
102108
}

sumologic/data_source_sumologic_role_test.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package sumologic
22

33
import (
4+
"regexp"
45
"testing"
56

67
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
78
)
89

9-
func TestAccDataSourcSumologicRole_basic(t *testing.T) {
10+
func TestAccDataSourceSumologicRole_basic(t *testing.T) {
1011
resource.Test(t, resource.TestCase{
1112
PreCheck: func() { testAccPreCheck(t) },
1213
Providers: testAccProviders,
@@ -33,6 +34,40 @@ func testAccDataSourceRoleCheck(name, reference string) resource.TestCheckFunc {
3334
)
3435
}
3536

37+
func TestAccDataSourceSumologicRole_role_name_doesnt_exist(t *testing.T) {
38+
roleDoestExistConfig := `
39+
data "sumologic_role" "role_name_doesnt_exist" {
40+
name = "someRoleNameDoesntExist8746"
41+
}`
42+
resource.Test(t, resource.TestCase{
43+
PreCheck: func() { testAccPreCheck(t) },
44+
Providers: testAccProviders,
45+
Steps: []resource.TestStep{
46+
{
47+
Config: roleDoestExistConfig,
48+
ExpectError: regexp.MustCompile("role with name 'someRoleNameDoesntExist8746' does not exist"),
49+
},
50+
},
51+
})
52+
}
53+
54+
func TestAccDataSourceSumologicRole_role_id_doesnt_exist(t *testing.T) {
55+
roleDoestExistConfig := `
56+
data "sumologic_role" "role_id_doesnt_exist" {
57+
id = 99999999999999
58+
}`
59+
resource.Test(t, resource.TestCase{
60+
PreCheck: func() { testAccPreCheck(t) },
61+
Providers: testAccProviders,
62+
Steps: []resource.TestStep{
63+
{
64+
Config: roleDoestExistConfig,
65+
ExpectError: regexp.MustCompile("role with id 99999999999999 not found"),
66+
},
67+
},
68+
})
69+
}
70+
3671
var testDataSourceAccSumologicRoleConfig = `
3772
resource "sumologic_role" "test" {
3873
name = "My_SumoRole"

sumologic/data_source_sumologic_user.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ func dataSourceSumologicUserRead(d *schema.ResourceData, meta interface{}) error
5959
if err != nil {
6060
return fmt.Errorf("user with id %v not found: %v", id, err)
6161
}
62+
if user == nil {
63+
return fmt.Errorf("user with id %v not found", id)
64+
}
6265
} else {
6366
if userEmail, ok := d.GetOk("email"); ok {
6467
email := userEmail.(string)
@@ -102,6 +105,9 @@ func (s *Client) GetUserByEmail(email string) (*User, error) {
102105
if err != nil {
103106
return nil, err
104107
}
108+
if len(response.User) == 0 {
109+
return nil, fmt.Errorf("user with email address '%s' does not exist", email)
110+
}
105111

106112
return &response.User[0], nil
107113
}

sumologic/data_source_sumologic_user_test.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package sumologic
22

33
import (
44
"fmt"
5+
"regexp"
56
"testing"
67

78
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
89
)
910

10-
func TestAccDataSourcSumologicUser_basic(t *testing.T) {
11+
func TestAccDataSourceSumologicUser_basic(t *testing.T) {
1112
resource.Test(t, resource.TestCase{
1213
PreCheck: func() { testAccPreCheck(t) },
1314
Providers: testAccProviders,
@@ -34,6 +35,40 @@ func testAccDataSourceUserCheck(email, reference string) resource.TestCheckFunc
3435
)
3536
}
3637

38+
func TestAccDataSourceSumologicUser_user_email_doesnt_exist(t *testing.T) {
39+
userDoestExistConfig := `
40+
data "sumologic_user" "user_email_doesnt_exist" {
41+
42+
}`
43+
resource.Test(t, resource.TestCase{
44+
PreCheck: func() { testAccPreCheck(t) },
45+
Providers: testAccProviders,
46+
Steps: []resource.TestStep{
47+
{
48+
Config: userDoestExistConfig,
49+
ExpectError: regexp.MustCompile("user with email address '[email protected]' does not exist"),
50+
},
51+
},
52+
})
53+
}
54+
55+
func TestAccDataSourceSumologicUser_user_id_doesnt_exist(t *testing.T) {
56+
userDoestExistConfig := `
57+
data "sumologic_user" "user_id_doesnt_exist" {
58+
id = 99999999999999
59+
}`
60+
resource.Test(t, resource.TestCase{
61+
PreCheck: func() { testAccPreCheck(t) },
62+
Providers: testAccProviders,
63+
Steps: []resource.TestStep{
64+
{
65+
Config: userDoestExistConfig,
66+
ExpectError: regexp.MustCompile("user with id 99999999999999 not found"),
67+
},
68+
},
69+
})
70+
}
71+
3772
var testDataSourceAccSumologicUserConfig = fmt.Sprintf(`
3873
resource "sumologic_user" "test_user" {
3974
first_name = "Test"

0 commit comments

Comments
 (0)