.ci/providerlint/passes/AWSAT004/README.md
The AWSAT004 analyzer reports TestCheckResourceAttr() calls with hardcoded TypeSet state hashes. Hardcoded state hashes are an unreliable way to specifically address state values since hashes may change over time, be inconsistent across partitions, and can be inadvertently changed by modifying configurations.
func TestAccELBV2LoadBalancer_basic(t *testing.T) {
...
resource.ParallelTest(t, resource.TestCase{
...
Steps: []resource.TestStep{
{
Config: testELBV2LoadBalancerConfig_basic,
Check: resource.ComposeTestCheckFunc(
...
resource.TestCheckResourceAttr(resourceName, "listener.206423021.instance_port", "8000"),
resource.TestCheckResourceAttr(resourceName, "listener.206423021.instance_protocol", "http"),
resource.TestCheckResourceAttr(resourceName, "listener.206423021.lb_port", "80"),
resource.TestCheckResourceAttr(resourceName, "listener.206423021.lb_protocol", "http"),
...
),
},
...
},
})
}
The flagged code above can be replaced with the following passing code:
func TestAccELBV2LoadBalancer_basic(t *testing.T) {
...
resource.ParallelTest(t, resource.TestCase{
...
Steps: []resource.TestStep{
{
Config: testAccELBV2LoadBalancerConfig_basic,
Check: resource.ComposeTestCheckFunc(
...
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "listener.*", map[string]string{
"instance_port": "8000",
"instance_protocol": "http",
"lb_port": "80",
"lb_protocol": "http",
),
...
},
...
},
})
}
Singular reports can be ignored by adding the a //lintignore:AWSAT004 Go code comment at the end of the offending line or on the line immediately proceding, e.g.
resource.TestCheckResourceAttr(resourceName, "listener.206423021.instance_port", "8000"), //lintignore:AWSAT004