chia7712 commented on code in PR #18966: URL: https://github.com/apache/kafka/pull/18966#discussion_r1976427776
########## core/src/test/scala/integration/kafka/api/PlaintextAdminIntegrationTest.scala: ########## @@ -138,6 +138,67 @@ class PlaintextAdminIntegrationTest extends BaseAdminIntegrationTest { assertEquals(configEntries, quotaEntities.get(entity).asScala) } + @Test + def testDefaultNameQuotaIsNotEqualToDefaultQuota(): Unit = { + val config = createConfig + val defaultQuota = "<default>" + client = Admin.create(config) + + //"<default>" can not create default quota + val userEntity = new ClientQuotaEntity(Map(ClientQuotaEntity.USER -> defaultQuota).asJava) + val clientEntity = new ClientQuotaEntity(Map(ClientQuotaEntity.CLIENT_ID -> defaultQuota).asJava) + val userAlterations = new ClientQuotaAlteration(userEntity, + Collections.singleton(new ClientQuotaAlteration.Op("consumer_byte_rate", 10000D))) + val clientAlterations = new ClientQuotaAlteration(clientEntity, + Collections.singleton(new ClientQuotaAlteration.Op("producer_byte_rate", 10000D))) + val alterations = List(userAlterations, clientAlterations) + client.alterClientQuotas(alterations.asJava).all().get() + + val values = client.alterClientQuotas(alterations.asJava).values() Review Comment: what is the purpose of this ? ########## core/src/test/scala/integration/kafka/api/PlaintextAdminIntegrationTest.scala: ########## @@ -138,6 +138,67 @@ class PlaintextAdminIntegrationTest extends BaseAdminIntegrationTest { assertEquals(configEntries, quotaEntities.get(entity).asScala) } + @Test + def testDefaultNameQuotaIsNotEqualToDefaultQuota(): Unit = { + val config = createConfig + val defaultQuota = "<default>" + client = Admin.create(config) + + //"<default>" can not create default quota + val userEntity = new ClientQuotaEntity(Map(ClientQuotaEntity.USER -> defaultQuota).asJava) + val clientEntity = new ClientQuotaEntity(Map(ClientQuotaEntity.CLIENT_ID -> defaultQuota).asJava) + val userAlterations = new ClientQuotaAlteration(userEntity, + Collections.singleton(new ClientQuotaAlteration.Op("consumer_byte_rate", 10000D))) + val clientAlterations = new ClientQuotaAlteration(clientEntity, + Collections.singleton(new ClientQuotaAlteration.Op("producer_byte_rate", 10000D))) + val alterations = List(userAlterations, clientAlterations) + client.alterClientQuotas(alterations.asJava).all().get() + + val values = client.alterClientQuotas(alterations.asJava).values() + values.forEach((entity, future) => { + val entityName = entity.entries().values().iterator().next() + assertEquals(defaultQuota, entityName) + }) + + TestUtils.waitUntilTrue(() => { + try { + val userQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( + ClientQuotaFilterComponent.ofDefaultEntity(ClientQuotaEntity.USER)))).entities().get() + val clientQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( + ClientQuotaFilterComponent.ofDefaultEntity(ClientQuotaEntity.CLIENT_ID)))).entities().get() + userQuotas.size() == 0 && clientQuotas.size() == 0 + } catch { + case _: Exception => false + } + }, "Timed out waiting for quota config to be propagated to all servers") + + val userQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( + ClientQuotaFilterComponent.ofDefaultEntity(ClientQuotaEntity.USER)))).entities().get() + val clientQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( + ClientQuotaFilterComponent.ofDefaultEntity(ClientQuotaEntity.CLIENT_ID)))).entities().get() + assertEquals(0, userQuotas.size()) + assertEquals(0, clientQuotas.size()) + + //null can create default quota + val correctDefaultEntity = new ClientQuotaEntity(Map(ClientQuotaEntity.USER -> Option.empty[String].orNull).asJava) + client.alterClientQuotas(List(new ClientQuotaAlteration(correctDefaultEntity, Collections.singleton( + new ClientQuotaAlteration.Op("producer_byte_rate", 1000D)))).asJava).all().get() + + TestUtils.waitUntilTrue(() => { + try { + val defaultQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( + ClientQuotaFilterComponent.ofDefaultEntity(ClientQuotaEntity.USER)))).entities().get() + defaultQuotas.size == 1 + } catch { + case _: Exception => false + } + }, "Timed out waiting for quota config to be propagated to all servers") + + val defaultQuotas = client.describeClientQuotas(ClientQuotaFilter.containsOnly(Collections.singletonList( Review Comment: we don't need this check as the check in line #187 has covered it, right? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org