Skip to content

Commit 69daf12

Browse files
committed
refactor: improve type safety in Kafka instance resource schema validation and remove unused functions
1 parent 49d3f34 commit 69daf12

File tree

5 files changed

+47
-64
lines changed

5 files changed

+47
-64
lines changed

internal/models/kafka_instance.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -875,15 +875,14 @@ func flattenPrometheusExporterVO(vo *client.InstancePrometheusExporterVO, previo
875875
Labels: types.MapNull(types.StringType),
876876
}
877877
if previous != nil {
878+
// Preserve any sensitive values (e.g. password/token) that are not returned by the API.
878879
prom = *previous
879880
}
880881

881882
prom.AuthType = retainString(cleanAPIString(vo.AuthType), prom.AuthType)
882883
prom.EndPoint = retainString(cleanAPIString(vo.EndPoint), prom.EndPoint)
883884
prom.PrometheusArn = retainString(cleanAPIString(vo.PrometheusArn), prom.PrometheusArn)
884885
prom.Username = retainString(cleanAPIString(vo.Username), prom.Username)
885-
prom.Password = prom.Password
886-
prom.Token = prom.Token
887886

888887
if len(vo.Labels) > 0 {
889888
labelMap := make(map[string]string, len(vo.Labels))

internal/models/kafka_instance_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,3 @@ func timePtr(s string) *time.Time {
436436
t, _ := time.Parse(time.RFC3339, s)
437437
return &t
438438
}
439-
440-
func int32Ptr(v int32) *int32 {
441-
return &v
442-
}

internal/provider/resource_instance.go

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,22 +1027,6 @@ func areNodeGroupsEqual(plan, state []models.NodeGroupModel) bool {
10271027
return true
10281028
}
10291029

1030-
func stringSetsEqual(a, b []string) bool {
1031-
if len(a) != len(b) {
1032-
return false
1033-
}
1034-
set := make(map[string]struct{}, len(a))
1035-
for _, v := range a {
1036-
set[v] = struct{}{}
1037-
}
1038-
for _, v := range b {
1039-
if _, ok := set[v]; !ok {
1040-
return false
1041-
}
1042-
}
1043-
return true
1044-
}
1045-
10461030
func metricsExporterChanged(plan, state *models.MetricsExporterModel) bool {
10471031
if plan == nil {
10481032
return state != nil
@@ -1188,19 +1172,6 @@ func buildPrometheusExporterParam(model *models.PrometheusExporterModel) (*clien
11881172
return prom, true
11891173
}
11901174

1191-
func boolAttrEqual(plan, state types.Bool) bool {
1192-
if plan.IsUnknown() {
1193-
return true
1194-
}
1195-
if plan.IsNull() {
1196-
return state.IsNull() || state.IsUnknown()
1197-
}
1198-
if state.IsNull() || state.IsUnknown() {
1199-
return false
1200-
}
1201-
return plan.ValueBool() == state.ValueBool()
1202-
}
1203-
12041175
func stringAttrEqual(plan, state types.String) bool {
12051176
if plan.IsUnknown() {
12061177
return true
@@ -1214,19 +1185,6 @@ func stringAttrEqual(plan, state types.String) bool {
12141185
return plan.ValueString() == state.ValueString()
12151186
}
12161187

1217-
func int64AttrEqual(plan, state types.Int64) bool {
1218-
if plan.IsUnknown() {
1219-
return true
1220-
}
1221-
if plan.IsNull() {
1222-
return state.IsNull() || state.IsUnknown()
1223-
}
1224-
if state.IsNull() || state.IsUnknown() {
1225-
return false
1226-
}
1227-
return plan.ValueInt64() == state.ValueInt64()
1228-
}
1229-
12301188
func mapAttrEqual(plan, state types.Map) bool {
12311189
if plan.IsUnknown() {
12321190
return true

internal/provider/resource_instance_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ func TestAccKafkaInstance_VM_Update(t *testing.T) {
356356
{
357357
Config: renderKafkaInstanceConfig(env, baseCfg),
358358
Check: resource.ComposeAggregateTestCheckFunc(
359-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
359+
testAccCheckKafkaInstanceExists(),
360360
resource.TestCheckResourceAttr("automq_kafka_instance.test", "name", baseCfg.Name),
361361
resource.TestCheckResourceAttr("automq_kafka_instance.test", "description", baseCfg.Description),
362362
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.reserved_aku", fmt.Sprintf("%d", baseCfg.ReservedAKU)),
@@ -368,7 +368,7 @@ func TestAccKafkaInstance_VM_Update(t *testing.T) {
368368
{
369369
Config: renderKafkaInstanceConfig(env, updatedCfg),
370370
Check: resource.ComposeAggregateTestCheckFunc(
371-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
371+
testAccCheckKafkaInstanceExists(),
372372
resource.TestCheckResourceAttr("automq_kafka_instance.test", "name", updatedCfg.Name),
373373
resource.TestCheckResourceAttr("automq_kafka_instance.test", "description", updatedCfg.Description),
374374
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.reserved_aku", fmt.Sprintf("%d", updatedCfg.ReservedAKU)),
@@ -379,7 +379,7 @@ func TestAccKafkaInstance_VM_Update(t *testing.T) {
379379
{
380380
Config: renderKafkaInstanceConfig(env, disableMetricsCfg),
381381
Check: resource.ComposeAggregateTestCheckFunc(
382-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
382+
testAccCheckKafkaInstanceExists(),
383383
resource.TestCheckNoResourceAttr("automq_kafka_instance.test", "features.metrics_exporter.prometheus"),
384384
),
385385
},
@@ -440,7 +440,7 @@ func TestAccKafkaInstance_K8S_Basic(t *testing.T) {
440440
{
441441
Config: renderKafkaInstanceConfig(env, cfg),
442442
Check: resource.ComposeAggregateTestCheckFunc(
443-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
443+
testAccCheckKafkaInstanceExists(),
444444
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.deploy_type", "K8S"),
445445
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.kubernetes_cluster_id", env.K8SClusterID),
446446
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.kubernetes_node_groups.#", fmt.Sprintf("%d", len(env.K8SNodeGroups))),
@@ -502,7 +502,7 @@ func TestAccKafkaInstance_ImmutableFields(t *testing.T) {
502502
{
503503
Config: renderKafkaInstanceConfig(env, base),
504504
Check: resource.ComposeAggregateTestCheckFunc(
505-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
505+
testAccCheckKafkaInstanceExists(),
506506
resource.TestCheckResourceAttr("automq_kafka_instance.test", "compute_specs.instance_role", base.InstanceRole),
507507
resource.TestCheckResourceAttr("automq_kafka_instance.test", "features.table_topic.warehouse", base.TableTopic.Warehouse),
508508
),
@@ -611,7 +611,7 @@ func TestAccKafkaInstance_SecurityCombinations(t *testing.T) {
611611
{
612612
Config: renderKafkaInstanceConfig(env, cfg),
613613
Check: resource.ComposeAggregateTestCheckFunc(
614-
testAccCheckKafkaInstanceExists("automq_kafka_instance.test"),
614+
testAccCheckKafkaInstanceExists(),
615615
resource.TestCheckResourceAttr("automq_kafka_instance.test", "features.security.authentication_methods.#", fmt.Sprintf("%d", len(combo.security.AuthenticationMethods))),
616616
resource.TestCheckResourceAttr("automq_kafka_instance.test", "features.security.transit_encryption_modes.#", fmt.Sprintf("%d", len(combo.security.TransitEncryptionModes))),
617617
resource.TestCheckResourceAttr("automq_kafka_instance.test", "features.security.data_encryption_mode", combo.security.DataEncryptionMode),
@@ -823,11 +823,13 @@ func ensureAccTimeout(t *testing.T) {
823823
}
824824
}
825825

826-
func testAccCheckKafkaInstanceExists(name string) resource.TestCheckFunc {
826+
const kafkaInstanceResourceName = "automq_kafka_instance.test"
827+
828+
func testAccCheckKafkaInstanceExists() resource.TestCheckFunc {
827829
return func(s *terraform.State) error {
828-
rs, ok := s.RootModule().Resources[name]
830+
rs, ok := s.RootModule().Resources[kafkaInstanceResourceName]
829831
if !ok {
830-
return fmt.Errorf("not found: %s", name)
832+
return fmt.Errorf("not found: %s", kafkaInstanceResourceName)
831833
}
832834
if rs.Primary.ID == "" {
833835
return fmt.Errorf("no Kafka instance ID is set")

internal/provider/resource_instance_validation_test.go

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,16 @@ func TestValidateKafkaInstanceConfiguration_DataBucketsMissingName(t *testing.T)
117117

118118
func TestWalModeValidatorRejectsUnsupportedValue(t *testing.T) {
119119
s := getKafkaInstanceResourceSchema(t)
120-
featuresAttr := s.Attributes["features"].(schema.SingleNestedAttribute)
121-
walAttr := featuresAttr.Attributes["wal_mode"].(schema.StringAttribute)
120+
featuresAttrRaw, ok := s.Attributes["features"].(schema.SingleNestedAttribute)
121+
if !ok {
122+
t.Fatalf("features attribute has unexpected type %T", s.Attributes["features"])
123+
}
124+
featuresAttr := featuresAttrRaw
125+
walAttrRaw, ok := featuresAttr.Attributes["wal_mode"].(schema.StringAttribute)
126+
if !ok {
127+
t.Fatalf("wal_mode attribute has unexpected type %T", featuresAttr.Attributes["wal_mode"])
128+
}
129+
walAttr := walAttrRaw
122130
if len(walAttr.Validators) == 0 {
123131
t.Fatalf("wal_mode validators missing")
124132
}
@@ -145,24 +153,44 @@ func TestWalModeValidatorRejectsUnsupportedValue(t *testing.T) {
145153

146154
func TestImmutableAttributesHaveRequiresReplace(t *testing.T) {
147155
s := getKafkaInstanceResourceSchema(t)
148-
featuresAttr := s.Attributes["features"].(schema.SingleNestedAttribute)
149-
computeAttr := s.Attributes["compute_specs"].(schema.SingleNestedAttribute)
156+
featuresAttrRaw, ok := s.Attributes["features"].(schema.SingleNestedAttribute)
157+
if !ok {
158+
t.Fatalf("features attribute has unexpected type %T", s.Attributes["features"])
159+
}
160+
featuresAttr := featuresAttrRaw
161+
computeAttrRaw, ok := s.Attributes["compute_specs"].(schema.SingleNestedAttribute)
162+
if !ok {
163+
t.Fatalf("compute_specs attribute has unexpected type %T", s.Attributes["compute_specs"])
164+
}
165+
computeAttr := computeAttrRaw
150166

151167
// features.table_topic
152-
tableTopicAttr := featuresAttr.Attributes["table_topic"].(schema.SingleNestedAttribute)
168+
tableTopicAttrRaw, ok := featuresAttr.Attributes["table_topic"].(schema.SingleNestedAttribute)
169+
if !ok {
170+
t.Fatalf("table_topic attribute has unexpected type %T", featuresAttr.Attributes["table_topic"])
171+
}
172+
tableTopicAttr := tableTopicAttrRaw
153173
if !hasObjectRequiresReplace(tableTopicAttr.PlanModifiers) {
154174
t.Fatalf("expected table_topic to require replacement, modifiers: %v", tableTopicAttr.PlanModifiers)
155175
}
156176
// compute_specs.instance_role
157-
instanceRoleAttr := computeAttr.Attributes["instance_role"].(schema.StringAttribute)
177+
instanceRoleAttrRaw, ok := computeAttr.Attributes["instance_role"].(schema.StringAttribute)
178+
if !ok {
179+
t.Fatalf("instance_role attribute has unexpected type %T", computeAttr.Attributes["instance_role"])
180+
}
181+
instanceRoleAttr := instanceRoleAttrRaw
158182
if !hasStringRequiresReplace(instanceRoleAttr.PlanModifiers) {
159183
t.Fatalf("expected instance_role to require replacement, modifiers: %v", instanceRoleAttr.PlanModifiers)
160184
}
161185
}
162186

163187
func getKafkaInstanceResourceSchema(t *testing.T) schema.Schema {
164188
t.Helper()
165-
res := NewKafkaInstanceResource().(*KafkaInstanceResource)
189+
resIface := NewKafkaInstanceResource()
190+
res, ok := resIface.(*KafkaInstanceResource)
191+
if !ok {
192+
t.Fatalf("NewKafkaInstanceResource returned unexpected type %T", resIface)
193+
}
166194
resp := resource.SchemaResponse{}
167195
res.Schema(context.Background(), resource.SchemaRequest{}, &resp)
168196
if resp.Diagnostics.HasError() {

0 commit comments

Comments
 (0)