@@ -14,6 +14,72 @@ import (
1414 gofastly "github.com/fastly/go-fastly/v12/fastly"
1515)
1616
17+ func TestResourceFastlyFlattenKafka (t * testing.T ) {
18+ cases := []struct {
19+ remote []* gofastly.Kafka
20+ local []map [string ]any
21+ }{
22+ {
23+ remote : []* gofastly.Kafka {
24+ {
25+ ServiceVersion : gofastly .ToPointer (1 ),
26+ Name : gofastly .ToPointer ("kafka-endpoint" ),
27+ Topic : gofastly .ToPointer ("topic" ),
28+ Brokers : gofastly .ToPointer ("127.0.0.1,127.0.0.2" ),
29+ CompressionCodec : gofastly .ToPointer ("snappy" ),
30+ RequiredACKs : gofastly .ToPointer ("-1" ),
31+ UseTLS : gofastly .ToPointer (true ),
32+ TLSCACert : gofastly .ToPointer (caCert (t )),
33+ TLSClientCert : gofastly .ToPointer (certificate (t )),
34+ TLSClientKey : gofastly .ToPointer (privateKey (t )),
35+ TLSHostname : gofastly .ToPointer ("example.com" ),
36+ ResponseCondition : gofastly .ToPointer ("response_condition" ),
37+ Format : gofastly .ToPointer (LoggingKafkaDefaultFormat ),
38+ FormatVersion : gofastly .ToPointer (2 ),
39+ Placement : gofastly .ToPointer ("none" ),
40+ ParseLogKeyvals : gofastly .ToPointer (true ),
41+ RequestMaxBytes : gofastly .ToPointer (12345 ),
42+ AuthMethod : gofastly .ToPointer ("scram-sha-512" ),
43+ User : gofastly .ToPointer ("user" ),
44+ Password : gofastly .ToPointer ("password" ),
45+ ProcessingRegion : gofastly .ToPointer ("eu" ),
46+ },
47+ },
48+ local : []map [string ]any {
49+ {
50+ "name" : "kafka-endpoint" ,
51+ "topic" : "topic" ,
52+ "brokers" : "127.0.0.1,127.0.0.2" ,
53+ "compression_codec" : "snappy" ,
54+ "required_acks" : "-1" ,
55+ "use_tls" : true ,
56+ "tls_ca_cert" : caCert (t ),
57+ "tls_client_cert" : certificate (t ),
58+ "tls_client_key" : privateKey (t ),
59+ "tls_hostname" : "example.com" ,
60+ "response_condition" : "response_condition" ,
61+ "format" : LoggingKafkaDefaultFormat ,
62+ "placement" : "none" ,
63+ "format_version" : 2 ,
64+ "parse_log_keyvals" : true ,
65+ "request_max_bytes" : 12345 ,
66+ "auth_method" : "scram-sha-512" ,
67+ "user" : "user" ,
68+ "password" : "password" ,
69+ "processing_region" : "eu" ,
70+ },
71+ },
72+ },
73+ }
74+
75+ for _ , c := range cases {
76+ out := flattenKafka (c .remote )
77+ if diff := cmp .Diff (out , c .local ); diff != "" {
78+ t .Fatalf ("Error matching: %s" , diff )
79+ }
80+ }
81+ }
82+
1783func TestAccFastlyServiceVCL_kafkalogging_basic (t * testing.T ) {
1884 var service gofastly.ServiceDetail
1985 name := fmt .Sprintf ("tf-test-%s" , acctest .RandString (10 ))
@@ -170,6 +236,46 @@ func TestAccFastlyServiceVCL_kafkalogging_basic_compute(t *testing.T) {
170236 })
171237}
172238
239+ func TestAccFastlyServiceVCL_kafkalogging_PreserveBooleansDuringNameChange (t * testing.T ) {
240+ var service gofastly.ServiceDetail
241+ serviceName := acctest .RandomWithPrefix ("tf-kafka" )
242+ domainName := fmt .Sprintf ("test.%s.com" , acctest .RandString (10 ))
243+
244+ initialKafkaName := "kafka-preserve"
245+ updatedKafkaName := "kafka-preserve-renamed"
246+
247+ // Values we want to preserve
248+ useTLS := true
249+ parseLogKeyvals := true
250+
251+ resource .ParallelTest (t , resource.TestCase {
252+ PreCheck : func () { testAccPreCheck (t ) },
253+ ProviderFactories : testAccProviders ,
254+ CheckDestroy : testAccCheckServiceVCLDestroy ,
255+ Steps : []resource.TestStep {
256+ {
257+ Config : testAccServiceVCLKafkaLoggingPreserveBooleans (serviceName , domainName , initialKafkaName , useTLS , parseLogKeyvals ),
258+ Check : resource .ComposeTestCheckFunc (
259+ testAccCheckServiceExists ("fastly_service_vcl.foo" , & service ),
260+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.#" , "1" ),
261+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.0.use_tls" , fmt .Sprintf ("%t" , useTLS )),
262+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.0.parse_log_keyvals" , fmt .Sprintf ("%t" , parseLogKeyvals )),
263+ ),
264+ },
265+ {
266+ // Only change the Kafka logging name (unrelated field), verify booleans are preserved
267+ Config : testAccServiceVCLKafkaLoggingPreserveBooleans (serviceName , domainName , updatedKafkaName , useTLS , parseLogKeyvals ),
268+ Check : resource .ComposeTestCheckFunc (
269+ testAccCheckServiceExists ("fastly_service_vcl.foo" , & service ),
270+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.#" , "1" ),
271+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.0.use_tls" , fmt .Sprintf ("%t" , useTLS )),
272+ resource .TestCheckResourceAttr ("fastly_service_vcl.foo" , "logging_kafka.0.parse_log_keyvals" , fmt .Sprintf ("%t" , parseLogKeyvals )),
273+ ),
274+ },
275+ },
276+ })
277+ }
278+
173279func testAccCheckFastlyServiceVCLKafkaAttributes (service * gofastly.ServiceDetail , kafka []* gofastly.Kafka , serviceType string ) resource.TestCheckFunc {
174280 return func (_ * terraform.State ) error {
175281 conn := testAccProvider .Meta ().(* APIClient ).conn
@@ -386,68 +492,31 @@ resource "fastly_service_vcl" "foo" {
386492}` , name , domain , format , format )
387493}
388494
389- func TestResourceFastlyFlattenKafka (t * testing.T ) {
390- cases := []struct {
391- remote []* gofastly.Kafka
392- local []map [string ]any
393- }{
394- {
395- remote : []* gofastly.Kafka {
396- {
397- ServiceVersion : gofastly .ToPointer (1 ),
398- Name : gofastly .ToPointer ("kafka-endpoint" ),
399- Topic : gofastly .ToPointer ("topic" ),
400- Brokers : gofastly .ToPointer ("127.0.0.1,127.0.0.2" ),
401- CompressionCodec : gofastly .ToPointer ("snappy" ),
402- RequiredACKs : gofastly .ToPointer ("-1" ),
403- UseTLS : gofastly .ToPointer (true ),
404- TLSCACert : gofastly .ToPointer (caCert (t )),
405- TLSClientCert : gofastly .ToPointer (certificate (t )),
406- TLSClientKey : gofastly .ToPointer (privateKey (t )),
407- TLSHostname : gofastly .ToPointer ("example.com" ),
408- ResponseCondition : gofastly .ToPointer ("response_condition" ),
409- Format : gofastly .ToPointer (LoggingKafkaDefaultFormat ),
410- FormatVersion : gofastly .ToPointer (2 ),
411- Placement : gofastly .ToPointer ("none" ),
412- ParseLogKeyvals : gofastly .ToPointer (true ),
413- RequestMaxBytes : gofastly .ToPointer (12345 ),
414- AuthMethod : gofastly .ToPointer ("scram-sha-512" ),
415- User : gofastly .ToPointer ("user" ),
416- Password : gofastly .ToPointer ("password" ),
417- ProcessingRegion : gofastly .ToPointer ("eu" ),
418- },
419- },
420- local : []map [string ]any {
421- {
422- "name" : "kafka-endpoint" ,
423- "topic" : "topic" ,
424- "brokers" : "127.0.0.1,127.0.0.2" ,
425- "compression_codec" : "snappy" ,
426- "required_acks" : "-1" ,
427- "use_tls" : true ,
428- "tls_ca_cert" : caCert (t ),
429- "tls_client_cert" : certificate (t ),
430- "tls_client_key" : privateKey (t ),
431- "tls_hostname" : "example.com" ,
432- "response_condition" : "response_condition" ,
433- "format" : LoggingKafkaDefaultFormat ,
434- "placement" : "none" ,
435- "format_version" : 2 ,
436- "parse_log_keyvals" : true ,
437- "request_max_bytes" : 12345 ,
438- "auth_method" : "scram-sha-512" ,
439- "user" : "user" ,
440- "password" : "password" ,
441- "processing_region" : "eu" ,
442- },
443- },
444- },
445- }
495+ func testAccServiceVCLKafkaLoggingPreserveBooleans (serviceName , domainName , kafkaName string , useTLS , parseLogKeyvals bool ) string {
496+ return fmt .Sprintf (`
497+ resource "fastly_service_vcl" "foo" {
498+ name = "%s"
446499
447- for _ , c := range cases {
448- out := flattenKafka (c .remote )
449- if diff := cmp .Diff (out , c .local ); diff != "" {
450- t .Fatalf ("Error matching: %s" , diff )
451- }
452- }
500+ domain {
501+ name = "%s"
502+ comment = "test"
503+ }
504+
505+ backend {
506+ address = "httpbin.org"
507+ name = "httpbin"
508+ }
509+
510+ logging_kafka {
511+ name = "%s"
512+ topic = "test-topic"
513+ brokers = "127.0.0.1:9092"
514+ required_acks = "1"
515+ use_tls = %t
516+ parse_log_keyvals = %t
517+ }
518+
519+ force_destroy = true
520+ }
521+ ` , serviceName , domainName , kafkaName , useTLS , parseLogKeyvals )
453522}
0 commit comments