(t *testing.T)
| 1402 | } |
| 1403 | |
| 1404 | func TestClusterAdminCreateAcls(t *testing.T) { |
| 1405 | resource := Resource{ResourceType: AclResourceTopic, ResourceName: "my_topic"} |
| 1406 | acl := Acl{Host: "localhost", Operation: AclOperationAlter, PermissionType: AclPermissionAny} |
| 1407 | createOK := func(req *request) encoderWithHeader { return NewMockCreateAclsResponse(t).For(req.body) } |
| 1408 | notController := func(req *request) encoderWithHeader { |
| 1409 | r := req.body.(*CreateAclsRequest) |
| 1410 | rsp := &CreateAclsResponse{Version: r.version()} |
| 1411 | for range r.AclCreations { |
| 1412 | rsp.AclCreationResponses = append(rsp.AclCreationResponses, &AclCreationResponse{Err: ErrNotController}) |
| 1413 | } |
| 1414 | return rsp |
| 1415 | } |
| 1416 | |
| 1417 | t.Run("creates acls", func(t *testing.T) { |
| 1418 | admin := singleBrokerAdmin(t, V1_0_0_0, map[string]requestHandlerFunc{ |
| 1419 | "CreateAclsRequest": createOK, |
| 1420 | }) |
| 1421 | |
| 1422 | rACLs := []*ResourceAcls{ |
| 1423 | { |
| 1424 | Resource: resource, |
| 1425 | Acls: []*Acl{&acl}, |
| 1426 | }, |
| 1427 | { |
| 1428 | Resource: Resource{ResourceType: AclResourceTopic, ResourceName: "your_topic"}, |
| 1429 | Acls: []*Acl{&acl}, |
| 1430 | }, |
| 1431 | } |
| 1432 | |
| 1433 | err := admin.CreateACLs(rACLs) |
| 1434 | require.NoError(t, err) |
| 1435 | }) |
| 1436 | |
| 1437 | t.Run("retries on stale controller", func(t *testing.T) { |
| 1438 | admin, retriedOnNewController := staleControllerAdmin(t, V1_0_0_0, "CreateAclsRequest", notController, createOK) |
| 1439 | |
| 1440 | err := admin.CreateACL(resource, acl) |
| 1441 | require.NoError(t, err) |
| 1442 | assert.True(t, retriedOnNewController(), "expected broker 2 to receive the retried request") |
| 1443 | }) |
| 1444 | |
| 1445 | t.Run("returns error when retries exhausted", func(t *testing.T) { |
| 1446 | admin, retriedOnNewController := staleControllerAdmin(t, V1_0_0_0, "CreateAclsRequest", notController, notController) |
| 1447 | |
| 1448 | err := admin.CreateACL(resource, acl) |
| 1449 | require.Error(t, err) |
| 1450 | require.ErrorIs(t, err, ErrNotController) |
| 1451 | assert.True(t, retriedOnNewController(), "expected broker 2 to receive the retried request") |
| 1452 | }) |
| 1453 | } |
| 1454 | |
| 1455 | // singleBrokerAdmin wires a single mock broker that names itself controller, |
| 1456 | // installs the given per-request handlers, and returns a ready admin client. |
nothing calls this directly
no test coverage detected