github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/logging/kafka/kafka_test.go (about) 1 package kafka_test 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/fastly/go-fastly/v9/fastly" 8 9 "github.com/fastly/cli/pkg/argparser" 10 "github.com/fastly/cli/pkg/commands/logging/kafka" 11 "github.com/fastly/cli/pkg/config" 12 "github.com/fastly/cli/pkg/errors" 13 "github.com/fastly/cli/pkg/global" 14 "github.com/fastly/cli/pkg/manifest" 15 "github.com/fastly/cli/pkg/mock" 16 "github.com/fastly/cli/pkg/testutil" 17 ) 18 19 func TestCreateKafkaInput(t *testing.T) { 20 for _, testcase := range []struct { 21 name string 22 cmd *kafka.CreateCommand 23 want *fastly.CreateKafkaInput 24 wantError string 25 }{ 26 { 27 name: "required values set flag serviceID", 28 cmd: createCommandRequired(), 29 want: &fastly.CreateKafkaInput{ 30 ServiceID: "123", 31 ServiceVersion: 4, 32 Name: fastly.ToPointer("log"), 33 Topic: fastly.ToPointer("logs"), 34 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 35 }, 36 }, 37 { 38 name: "all values set flag serviceID", 39 cmd: createCommandAll(), 40 want: &fastly.CreateKafkaInput{ 41 ServiceID: "123", 42 ServiceVersion: 4, 43 Name: fastly.ToPointer("logs"), 44 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 45 Topic: fastly.ToPointer("logs"), 46 RequiredACKs: fastly.ToPointer("-1"), 47 UseTLS: fastly.ToPointer(fastly.Compatibool(true)), 48 CompressionCodec: fastly.ToPointer("zippy"), 49 Format: fastly.ToPointer(`%h %l %u %t "%r" %>s %b`), 50 FormatVersion: fastly.ToPointer(2), 51 ResponseCondition: fastly.ToPointer("Prevent default logging"), 52 Placement: fastly.ToPointer("none"), 53 TLSCACert: fastly.ToPointer("-----BEGIN CERTIFICATE-----foo"), 54 TLSHostname: fastly.ToPointer("example.com"), 55 TLSClientCert: fastly.ToPointer("-----BEGIN CERTIFICATE-----bar"), 56 TLSClientKey: fastly.ToPointer("-----BEGIN PRIVATE KEY-----bar"), 57 }, 58 }, 59 { 60 name: "error missing serviceID", 61 cmd: createCommandMissingServiceID(), 62 wantError: errors.ErrNoServiceID.Error(), 63 }, 64 { 65 name: "verify SASL fields", 66 cmd: createCommandSASL("scram-sha-512", "user1", "12345"), 67 want: &fastly.CreateKafkaInput{ 68 ServiceID: "123", 69 ServiceVersion: 4, 70 Name: fastly.ToPointer("log"), 71 Topic: fastly.ToPointer("logs"), 72 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 73 ParseLogKeyvals: fastly.ToPointer(fastly.Compatibool(true)), 74 RequestMaxBytes: fastly.ToPointer(11111), 75 AuthMethod: fastly.ToPointer("scram-sha-512"), 76 User: fastly.ToPointer("user1"), 77 Password: fastly.ToPointer("12345"), 78 }, 79 }, 80 } { 81 t.Run(testcase.name, func(t *testing.T) { 82 var bs []byte 83 out := bytes.NewBuffer(bs) 84 verboseMode := true 85 86 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 87 AutoCloneFlag: testcase.cmd.AutoClone, 88 APIClient: testcase.cmd.Globals.APIClient, 89 Manifest: testcase.cmd.Manifest, 90 Out: out, 91 ServiceVersionFlag: testcase.cmd.ServiceVersion, 92 VerboseMode: verboseMode, 93 }) 94 95 switch { 96 case err != nil && testcase.wantError == "": 97 t.Fatalf("unexpected error getting service details: %v", err) 98 return 99 case err != nil && testcase.wantError != "": 100 testutil.AssertErrorContains(t, err, testcase.wantError) 101 return 102 case err == nil && testcase.wantError != "": 103 t.Fatalf("expected error, have nil (service details: %s, %d)", serviceID, serviceVersion.Number) 104 case err == nil && testcase.wantError == "": 105 have, err := testcase.cmd.ConstructInput(serviceID, fastly.ToValue(serviceVersion.Number)) 106 testutil.AssertErrorContains(t, err, testcase.wantError) 107 testutil.AssertEqual(t, testcase.want, have) 108 } 109 }) 110 } 111 } 112 113 func TestUpdateKafkaInput(t *testing.T) { 114 scenarios := []struct { 115 name string 116 cmd *kafka.UpdateCommand 117 api mock.API 118 want *fastly.UpdateKafkaInput 119 wantError string 120 }{ 121 { 122 name: "all values set flag serviceID", 123 cmd: updateCommandAll(), 124 api: mock.API{ 125 ListVersionsFn: testutil.ListVersions, 126 CloneVersionFn: testutil.CloneVersionResult(4), 127 GetKafkaFn: getKafkaOK, 128 }, 129 want: &fastly.UpdateKafkaInput{ 130 ServiceID: "123", 131 ServiceVersion: 4, 132 Name: "log", 133 NewName: fastly.ToPointer("new1"), 134 Topic: fastly.ToPointer("new2"), 135 Brokers: fastly.ToPointer("new3"), 136 RequiredACKs: fastly.ToPointer("new4"), 137 UseTLS: fastly.ToPointer(fastly.Compatibool(false)), 138 CompressionCodec: fastly.ToPointer("new5"), 139 Placement: fastly.ToPointer("new6"), 140 Format: fastly.ToPointer("new7"), 141 FormatVersion: fastly.ToPointer(3), 142 ResponseCondition: fastly.ToPointer("new8"), 143 TLSCACert: fastly.ToPointer("new9"), 144 TLSClientCert: fastly.ToPointer("new10"), 145 TLSClientKey: fastly.ToPointer("new11"), 146 TLSHostname: fastly.ToPointer("new12"), 147 ParseLogKeyvals: fastly.ToPointer(fastly.Compatibool(false)), 148 RequestMaxBytes: fastly.ToPointer(22222), 149 AuthMethod: fastly.ToPointer("plain"), 150 User: fastly.ToPointer("new13"), 151 Password: fastly.ToPointer("new14"), 152 }, 153 }, 154 { 155 name: "no updates", 156 cmd: updateCommandNoUpdates(), 157 api: mock.API{ 158 ListVersionsFn: testutil.ListVersions, 159 CloneVersionFn: testutil.CloneVersionResult(4), 160 GetKafkaFn: getKafkaOK, 161 }, 162 want: &fastly.UpdateKafkaInput{ 163 ServiceID: "123", 164 ServiceVersion: 4, 165 Name: "log", 166 }, 167 }, 168 { 169 name: "error missing serviceID", 170 cmd: updateCommandMissingServiceID(), 171 want: nil, 172 wantError: errors.ErrNoServiceID.Error(), 173 }, 174 { 175 name: "verify SASL fields", 176 api: mock.API{ 177 ListVersionsFn: testutil.ListVersions, 178 CloneVersionFn: testutil.CloneVersionResult(4), 179 GetKafkaFn: getKafkaOK, 180 }, 181 cmd: updateCommandSASL("scram-sha-512", "user1", "12345"), 182 want: &fastly.UpdateKafkaInput{ 183 ServiceID: "123", 184 ServiceVersion: 4, 185 Name: "log", 186 Topic: fastly.ToPointer("logs"), 187 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 188 ParseLogKeyvals: fastly.ToPointer(fastly.Compatibool(true)), 189 RequestMaxBytes: fastly.ToPointer(11111), 190 AuthMethod: fastly.ToPointer("scram-sha-512"), 191 User: fastly.ToPointer("user1"), 192 Password: fastly.ToPointer("12345"), 193 }, 194 }, 195 { 196 name: "verify disabling SASL", 197 api: mock.API{ 198 ListVersionsFn: testutil.ListVersions, 199 CloneVersionFn: testutil.CloneVersionResult(4), 200 GetKafkaFn: getKafkaSASL, 201 }, 202 cmd: updateCommandNoSASL(), 203 want: &fastly.UpdateKafkaInput{ 204 ServiceID: "123", 205 ServiceVersion: 4, 206 Name: "log", 207 Topic: fastly.ToPointer("logs"), 208 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 209 ParseLogKeyvals: fastly.ToPointer(fastly.Compatibool(true)), 210 RequestMaxBytes: fastly.ToPointer(11111), 211 AuthMethod: fastly.ToPointer(""), 212 User: fastly.ToPointer(""), 213 Password: fastly.ToPointer(""), 214 }, 215 }, 216 } 217 for testcaseIdx := range scenarios { 218 testcase := &scenarios[testcaseIdx] 219 t.Run(testcase.name, func(t *testing.T) { 220 testcase.cmd.Globals.APIClient = testcase.api 221 222 var bs []byte 223 out := bytes.NewBuffer(bs) 224 verboseMode := true 225 226 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 227 AutoCloneFlag: testcase.cmd.AutoClone, 228 APIClient: testcase.api, 229 Manifest: testcase.cmd.Manifest, 230 Out: out, 231 ServiceVersionFlag: testcase.cmd.ServiceVersion, 232 VerboseMode: verboseMode, 233 }) 234 235 switch { 236 case err != nil && testcase.wantError == "": 237 t.Fatalf("unexpected error getting service details: %v", err) 238 return 239 case err != nil && testcase.wantError != "": 240 testutil.AssertErrorContains(t, err, testcase.wantError) 241 return 242 case err == nil && testcase.wantError != "": 243 t.Fatalf("expected error, have nil (service details: %s, %d)", serviceID, serviceVersion.Number) 244 case err == nil && testcase.wantError == "": 245 have, err := testcase.cmd.ConstructInput(serviceID, fastly.ToValue(serviceVersion.Number)) 246 testutil.AssertErrorContains(t, err, testcase.wantError) 247 testutil.AssertEqual(t, testcase.want, have) 248 } 249 }) 250 } 251 } 252 253 func createCommandRequired() *kafka.CreateCommand { 254 var b bytes.Buffer 255 256 g := global.Data{ 257 Config: config.File{}, 258 Env: config.Environment{}, 259 Output: &b, 260 } 261 g.APIClient, _ = mock.APIClient(mock.API{ 262 ListVersionsFn: testutil.ListVersions, 263 CloneVersionFn: testutil.CloneVersionResult(4), 264 })("token", "endpoint", false) 265 266 return &kafka.CreateCommand{ 267 Base: argparser.Base{ 268 Globals: &g, 269 }, 270 Manifest: manifest.Data{ 271 Flag: manifest.Flag{ 272 ServiceID: "123", 273 }, 274 }, 275 ServiceVersion: argparser.OptionalServiceVersion{ 276 OptionalString: argparser.OptionalString{Value: "1"}, 277 }, 278 AutoClone: argparser.OptionalAutoClone{ 279 OptionalBool: argparser.OptionalBool{ 280 Optional: argparser.Optional{ 281 WasSet: true, 282 }, 283 Value: true, 284 }, 285 }, 286 EndpointName: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "log"}, 287 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 288 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "127.0.0.1,127.0.0.2"}, 289 } 290 } 291 292 func createCommandAll() *kafka.CreateCommand { 293 var b bytes.Buffer 294 295 g := global.Data{ 296 Config: config.File{}, 297 Env: config.Environment{}, 298 Output: &b, 299 } 300 g.APIClient, _ = mock.APIClient(mock.API{ 301 ListVersionsFn: testutil.ListVersions, 302 CloneVersionFn: testutil.CloneVersionResult(4), 303 })("token", "endpoint", false) 304 305 return &kafka.CreateCommand{ 306 Base: argparser.Base{ 307 Globals: &g, 308 }, 309 Manifest: manifest.Data{ 310 Flag: manifest.Flag{ 311 ServiceID: "123", 312 }, 313 }, 314 ServiceVersion: argparser.OptionalServiceVersion{ 315 OptionalString: argparser.OptionalString{Value: "1"}, 316 }, 317 AutoClone: argparser.OptionalAutoClone{ 318 OptionalBool: argparser.OptionalBool{ 319 Optional: argparser.Optional{ 320 WasSet: true, 321 }, 322 Value: true, 323 }, 324 }, 325 EndpointName: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 326 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 327 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "127.0.0.1,127.0.0.2"}, 328 UseTLS: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 329 RequiredACKs: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "-1"}, 330 CompressionCodec: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "zippy"}, 331 Format: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: `%h %l %u %t "%r" %>s %b`}, 332 FormatVersion: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 2}, 333 ResponseCondition: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "Prevent default logging"}, 334 Placement: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "none"}, 335 TLSCACert: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "-----BEGIN CERTIFICATE-----foo"}, 336 TLSHostname: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "example.com"}, 337 TLSClientCert: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "-----BEGIN CERTIFICATE-----bar"}, 338 TLSClientKey: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "-----BEGIN PRIVATE KEY-----bar"}, 339 } 340 } 341 342 func createCommandSASL(authMethod, user, password string) *kafka.CreateCommand { 343 var b bytes.Buffer 344 345 g := global.Data{ 346 Config: config.File{}, 347 Env: config.Environment{}, 348 Output: &b, 349 } 350 g.APIClient, _ = mock.APIClient(mock.API{ 351 ListVersionsFn: testutil.ListVersions, 352 CloneVersionFn: testutil.CloneVersionResult(4), 353 })("token", "endpoint", false) 354 355 return &kafka.CreateCommand{ 356 Base: argparser.Base{ 357 Globals: &g, 358 }, 359 Manifest: manifest.Data{ 360 Flag: manifest.Flag{ 361 ServiceID: "123", 362 }, 363 }, 364 ServiceVersion: argparser.OptionalServiceVersion{ 365 OptionalString: argparser.OptionalString{Value: "1"}, 366 }, 367 AutoClone: argparser.OptionalAutoClone{ 368 OptionalBool: argparser.OptionalBool{ 369 Optional: argparser.Optional{ 370 WasSet: true, 371 }, 372 Value: true, 373 }, 374 }, 375 EndpointName: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "log"}, 376 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 377 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "127.0.0.1,127.0.0.2"}, 378 ParseLogKeyvals: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 379 RequestMaxBytes: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 11111}, 380 UseSASL: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 381 AuthMethod: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: authMethod}, 382 User: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: user}, 383 Password: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: password}, 384 } 385 } 386 387 func createCommandMissingServiceID() *kafka.CreateCommand { 388 res := createCommandAll() 389 res.Manifest = manifest.Data{} 390 return res 391 } 392 393 func updateCommandNoUpdates() *kafka.UpdateCommand { 394 var b bytes.Buffer 395 396 g := global.Data{ 397 Config: config.File{}, 398 Env: config.Environment{}, 399 Output: &b, 400 } 401 402 return &kafka.UpdateCommand{ 403 Base: argparser.Base{ 404 Globals: &g, 405 }, 406 Manifest: manifest.Data{ 407 Flag: manifest.Flag{ 408 ServiceID: "123", 409 }, 410 }, 411 EndpointName: "log", 412 ServiceVersion: argparser.OptionalServiceVersion{ 413 OptionalString: argparser.OptionalString{Value: "1"}, 414 }, 415 AutoClone: argparser.OptionalAutoClone{ 416 OptionalBool: argparser.OptionalBool{ 417 Optional: argparser.Optional{ 418 WasSet: true, 419 }, 420 Value: true, 421 }, 422 }, 423 } 424 } 425 426 func updateCommandAll() *kafka.UpdateCommand { 427 var b bytes.Buffer 428 429 g := global.Data{ 430 Config: config.File{}, 431 Env: config.Environment{}, 432 Output: &b, 433 } 434 435 return &kafka.UpdateCommand{ 436 Base: argparser.Base{ 437 Globals: &g, 438 }, 439 Manifest: manifest.Data{ 440 Flag: manifest.Flag{ 441 ServiceID: "123", 442 }, 443 }, 444 EndpointName: "log", 445 ServiceVersion: argparser.OptionalServiceVersion{ 446 OptionalString: argparser.OptionalString{Value: "1"}, 447 }, 448 AutoClone: argparser.OptionalAutoClone{ 449 OptionalBool: argparser.OptionalBool{ 450 Optional: argparser.Optional{ 451 WasSet: true, 452 }, 453 Value: true, 454 }, 455 }, 456 NewName: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new1"}, 457 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new2"}, 458 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new3"}, 459 UseTLS: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: false}, 460 RequiredACKs: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new4"}, 461 CompressionCodec: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new5"}, 462 Placement: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new6"}, 463 Format: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new7"}, 464 FormatVersion: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 3}, 465 ResponseCondition: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new8"}, 466 TLSCACert: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new9"}, 467 TLSClientCert: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new10"}, 468 TLSClientKey: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new11"}, 469 TLSHostname: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new12"}, 470 ParseLogKeyvals: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: false}, 471 RequestMaxBytes: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 22222}, 472 UseSASL: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 473 AuthMethod: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "plain"}, 474 User: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new13"}, 475 Password: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "new14"}, 476 } 477 } 478 479 func updateCommandSASL(authMethod, user, password string) *kafka.UpdateCommand { 480 var b bytes.Buffer 481 482 g := global.Data{ 483 Config: config.File{}, 484 Env: config.Environment{}, 485 Output: &b, 486 } 487 488 return &kafka.UpdateCommand{ 489 Base: argparser.Base{ 490 Globals: &g, 491 }, 492 Manifest: manifest.Data{ 493 Flag: manifest.Flag{ 494 ServiceID: "123", 495 }, 496 }, 497 EndpointName: "log", 498 ServiceVersion: argparser.OptionalServiceVersion{ 499 OptionalString: argparser.OptionalString{Value: "1"}, 500 }, 501 AutoClone: argparser.OptionalAutoClone{ 502 OptionalBool: argparser.OptionalBool{ 503 Optional: argparser.Optional{ 504 WasSet: true, 505 }, 506 Value: true, 507 }, 508 }, 509 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 510 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "127.0.0.1,127.0.0.2"}, 511 ParseLogKeyvals: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 512 RequestMaxBytes: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 11111}, 513 UseSASL: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 514 AuthMethod: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: authMethod}, 515 User: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: user}, 516 Password: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: password}, 517 } 518 } 519 520 func updateCommandNoSASL() *kafka.UpdateCommand { 521 var b bytes.Buffer 522 523 g := global.Data{ 524 Config: config.File{}, 525 Env: config.Environment{}, 526 Output: &b, 527 } 528 529 return &kafka.UpdateCommand{ 530 Base: argparser.Base{ 531 Globals: &g, 532 }, 533 Manifest: manifest.Data{ 534 Flag: manifest.Flag{ 535 ServiceID: "123", 536 }, 537 }, 538 EndpointName: "log", 539 ServiceVersion: argparser.OptionalServiceVersion{ 540 OptionalString: argparser.OptionalString{Value: "1"}, 541 }, 542 AutoClone: argparser.OptionalAutoClone{ 543 OptionalBool: argparser.OptionalBool{ 544 Optional: argparser.Optional{ 545 WasSet: true, 546 }, 547 Value: true, 548 }, 549 }, 550 Topic: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "logs"}, 551 Brokers: argparser.OptionalString{Optional: argparser.Optional{WasSet: true}, Value: "127.0.0.1,127.0.0.2"}, 552 ParseLogKeyvals: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: true}, 553 RequestMaxBytes: argparser.OptionalInt{Optional: argparser.Optional{WasSet: true}, Value: 11111}, 554 UseSASL: argparser.OptionalBool{Optional: argparser.Optional{WasSet: true}, Value: false}, 555 AuthMethod: argparser.OptionalString{Optional: argparser.Optional{WasSet: false}, Value: ""}, 556 User: argparser.OptionalString{Optional: argparser.Optional{WasSet: false}, Value: ""}, 557 Password: argparser.OptionalString{Optional: argparser.Optional{WasSet: false}, Value: ""}, 558 } 559 } 560 561 func updateCommandMissingServiceID() *kafka.UpdateCommand { 562 res := updateCommandAll() 563 res.Manifest = manifest.Data{} 564 return res 565 } 566 567 func getKafkaSASL(i *fastly.GetKafkaInput) (*fastly.Kafka, error) { 568 return &fastly.Kafka{ 569 ServiceID: fastly.ToPointer(i.ServiceID), 570 ServiceVersion: fastly.ToPointer(i.ServiceVersion), 571 Name: fastly.ToPointer("log"), 572 Brokers: fastly.ToPointer("127.0.0.1,127.0.0.2"), 573 Topic: fastly.ToPointer("logs"), 574 RequiredACKs: fastly.ToPointer("-1"), 575 UseTLS: fastly.ToPointer(true), 576 CompressionCodec: fastly.ToPointer("zippy"), 577 Format: fastly.ToPointer(`%h %l %u %t "%r" %>s %b`), 578 FormatVersion: fastly.ToPointer(2), 579 ResponseCondition: fastly.ToPointer("Prevent default logging"), 580 Placement: fastly.ToPointer("none"), 581 TLSCACert: fastly.ToPointer("-----BEGIN CERTIFICATE-----foo"), 582 TLSHostname: fastly.ToPointer("example.com"), 583 TLSClientCert: fastly.ToPointer("-----BEGIN CERTIFICATE-----bar"), 584 TLSClientKey: fastly.ToPointer("-----BEGIN PRIVATE KEY-----bar"), 585 ParseLogKeyvals: fastly.ToPointer(false), 586 RequestMaxBytes: fastly.ToPointer(0), 587 AuthMethod: fastly.ToPointer("plain"), 588 User: fastly.ToPointer("user"), 589 Password: fastly.ToPointer("password"), 590 }, nil 591 }