You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/04/29 01:14:46 UTC
[james-project] 12/27: JAMES-3138 Webadmin endpoint and guice
bindings for recomputing current quotas
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1b0bc6e1d6caa93a7a155193ac00d1fd09809db2
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Wed Apr 22 11:01:21 2020 +0700
JAMES-3138 Webadmin endpoint and guice bindings for recomputing current quotas
---
.../org/apache/james/CassandraJamesServerMain.java | 2 +
.../guice/cassandra-rabbitmq-guice/pom.xml | 4 ++
.../james/modules/TaskSerializationModule.java | 13 +++++
.../java/org/apache/james/JPAJamesServerMain.java | 2 +
.../InconsistencyQuotasSolvingRoutesModule.java | 40 +++++++++++++++
.../james/modules/server/MailboxRoutesModule.java | 2 +
...dminServerTaskSerializationIntegrationTest.java | 22 +++++++-
server/protocols/webadmin/webadmin-mailbox/pom.xml | 4 ++
.../RecomputeCurrentQuotasRequestToTask.java | 37 ++++++++++++++
.../james/webadmin/routes/UserQuotaRoutes.java | 59 +++++++++++++++++++++-
.../routes/WebAdminQuotaSearchTestSystem.java | 11 +++-
11 files changed, 192 insertions(+), 4 deletions(-)
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index 9bc756c..a7fcc7d 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -55,6 +55,7 @@ import org.apache.james.modules.server.DKIMMailetModule;
import org.apache.james.modules.server.DLPRoutesModule;
import org.apache.james.modules.server.DataRoutesModules;
import org.apache.james.modules.server.ElasticSearchMetricReporterModule;
+import org.apache.james.modules.server.InconsistencyQuotasSolvingRoutesModule;
import org.apache.james.modules.server.JMXServerModule;
import org.apache.james.modules.server.JmapTasksModule;
import org.apache.james.modules.server.MailQueueRoutesModule;
@@ -85,6 +86,7 @@ public class CassandraJamesServerMain implements JamesServerMain {
new DataRoutesModules(),
new DeletedMessageVaultRoutesModule(),
new DLPRoutesModule(),
+ new InconsistencyQuotasSolvingRoutesModule(),
new InconsistencySolvingRoutesModule(),
new JmapTasksModule(),
new MailboxesExportRoutesModule(),
diff --git a/server/container/guice/cassandra-rabbitmq-guice/pom.xml b/server/container/guice/cassandra-rabbitmq-guice/pom.xml
index 29fffab..ade5311 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/pom.xml
+++ b/server/container/guice/cassandra-rabbitmq-guice/pom.xml
@@ -87,6 +87,10 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-tools-quota-recompute</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>blob-objectstorage</artifactId>
<type>test-jar</type>
<scope>test</scope>
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
index ab6b867..0e8b86f 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
@@ -46,6 +46,9 @@ import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesT
import org.apache.james.mailbox.cassandra.mail.task.SolveMessageInconsistenciesTaskDTO;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskAdditionalInformationDTO;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTaskDTO;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.ManageableMailQueue;
import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO;
@@ -279,6 +282,11 @@ public class TaskSerializationModule extends AbstractModule {
}
@ProvidesIntoSet
+ public TaskDTOModule<? extends Task, ? extends TaskDTO> recomputeCurrentQuotasTask(RecomputeCurrentQuotasService service) {
+ return RecomputeCurrentQuotasTaskDTO.module(service);
+ }
+
+ @ProvidesIntoSet
public TaskDTOModule<? extends Task, ? extends TaskDTO> messageIdReindexingTask(MessageIdReIndexingTask.Factory factory) {
return MessageIdReindexingTaskDTO.module(factory);
}
@@ -399,6 +407,11 @@ public class TaskSerializationModule extends AbstractModule {
}
@ProvidesIntoSet
+ public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO> recomputeCurrentQuotasAdditionalInformation() {
+ return RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE;
+ }
+
+ @ProvidesIntoSet
public AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO> messageIdReindexingAdditionalInformation(MessageId.Factory messageIdFactory) {
return MessageIdReindexingTaskAdditionalInformationDTO.serializationModule(messageIdFactory);
}
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
index 45f6c3d..19ba467 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -36,6 +36,7 @@ import org.apache.james.modules.protocols.SMTPServerModule;
import org.apache.james.modules.server.DataRoutesModules;
import org.apache.james.modules.server.DefaultProcessorsConfigurationProviderModule;
import org.apache.james.modules.server.ElasticSearchMetricReporterModule;
+import org.apache.james.modules.server.InconsistencyQuotasSolvingRoutesModule;
import org.apache.james.modules.server.JMXServerModule;
import org.apache.james.modules.server.MailQueueRoutesModule;
import org.apache.james.modules.server.MailRepositoriesRoutesModule;
@@ -57,6 +58,7 @@ public class JPAJamesServerMain implements JamesServerMain {
public static final Module WEBADMIN = Modules.combine(
new WebAdminServerModule(),
new DataRoutesModules(),
+ new InconsistencyQuotasSolvingRoutesModule(),
new MailboxRoutesModule(),
new MailQueueRoutesModule(),
new MailRepositoriesRoutesModule(),
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/InconsistencyQuotasSolvingRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/InconsistencyQuotasSolvingRoutesModule.java
new file mode 100644
index 0000000..a5a77c0
--- /dev/null
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/InconsistencyQuotasSolvingRoutesModule.java
@@ -0,0 +1,40 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.modules.server;
+
+import static org.apache.james.webadmin.routes.UserQuotaRoutes.USER_QUOTAS_OPERATIONS_INJECTION_KEY;
+
+import org.apache.james.webadmin.routes.UserQuotaRoutes;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
+
+public class InconsistencyQuotasSolvingRoutesModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class, Names.named(USER_QUOTAS_OPERATIONS_INJECTION_KEY))
+ .addBinding()
+ .to(UserQuotaRoutes.RecomputeCurrentQuotasRequestToTask.class);
+ }
+
+}
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
index 42a7c88..6da9e2c 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
@@ -23,6 +23,7 @@ import static org.apache.james.webadmin.routes.MailboxesRoutes.ALL_MAILBOXES_TAS
import static org.apache.james.webadmin.routes.MailboxesRoutes.ONE_MAILBOX_TASKS;
import static org.apache.james.webadmin.routes.MailboxesRoutes.ONE_MAIL_TASKS;
import static org.apache.james.webadmin.routes.UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY;
+import static org.apache.james.webadmin.routes.UserQuotaRoutes.USER_QUOTAS_OPERATIONS_INJECTION_KEY;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.jackson.QuotaModule;
@@ -58,5 +59,6 @@ public class MailboxRoutesModule extends AbstractModule {
Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(ALL_MAILBOXES_TASKS));
Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(ONE_MAILBOX_TASKS));
Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(ONE_MAIL_TASKS));
+ Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(USER_QUOTAS_OPERATIONS_INJECTION_KEY));
}
}
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index fe77c70..124c4dd 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -82,7 +82,6 @@ import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
import org.apache.james.webadmin.routes.TasksRoutes;
import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes;
import org.apache.mailet.base.test.FakeMail;
-import org.assertj.core.api.Assertions;
import org.eclipse.jetty.http.HttpStatus;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeEach;
@@ -759,6 +758,27 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest {
.body("additionalInformation.processedMailboxes", is(0));
}
+ @Test
+ void recomputeCurrentQuotasShouldComplete() {
+ String taskId = with()
+ .basePath("/quota/users")
+ .queryParam("task", "RecomputeCurrentQuotas")
+ .post()
+ .jsonPath()
+ .get("taskId");
+
+ given()
+ .basePath(TasksRoutes.BASE)
+ .when()
+ .get(taskId + "/await")
+ .then()
+ .body("status", is("completed"))
+ .body("taskId", is(taskId))
+ .body("type", is("recompute-current-quotas"))
+ .body("additionalInformation.processedQuotaRoots", is(0))
+ .body("additionalInformation.failedQuotaRoots", empty());
+ }
+
private MailboxListener.MailboxAdded createMailboxAdded() {
String uuid = "6e0dd59d-660e-4d9b-b22f-0354479f47b4";
return EventFactory.mailboxAdded()
diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index c5e95fb..44fd413 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -90,6 +90,10 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>apache-james-mailbox-tools-quota-recompute</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>apache-james-backends-es</artifactId>
<type>test-jar</type>
<scope>test</scope>
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/RecomputeCurrentQuotasRequestToTask.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/RecomputeCurrentQuotasRequestToTask.java
new file mode 100644
index 0000000..a407c77
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/RecomputeCurrentQuotasRequestToTask.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.webadmin.routes;
+
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTask;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import org.apache.james.webadmin.tasks.TaskRegistrationKey;
+
+public class RecomputeCurrentQuotasRequestToTask extends TaskFromRequestRegistry.TaskRegistration {
+ private static final TaskRegistrationKey REGISTRATION_KEY = TaskRegistrationKey.of("RecomputeCurrentQuotas");
+
+ @Inject
+ public RecomputeCurrentQuotasRequestToTask(RecomputeCurrentQuotasService service) {
+ super(REGISTRATION_KEY,
+ request -> new RecomputeCurrentQuotasTask(service));
+ }
+}
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
index fda1b65..0f73118 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
@@ -19,6 +19,8 @@
package org.apache.james.webadmin.routes;
+import static org.apache.james.webadmin.routes.MailboxesRoutes.TASK_PARAMETER;
+
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@@ -27,8 +29,10 @@ import java.util.Set;
import java.util.stream.Collectors;
import javax.inject.Inject;
+import javax.inject.Named;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@@ -37,10 +41,13 @@ import org.apache.james.core.Domain;
import org.apache.james.core.Username;
import org.apache.james.core.quota.QuotaCountLimit;
import org.apache.james.core.quota.QuotaSizeLimit;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
+import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTask;
import org.apache.james.quota.search.Limit;
import org.apache.james.quota.search.Offset;
import org.apache.james.quota.search.QuotaBoundary;
import org.apache.james.quota.search.QuotaQuery;
+import org.apache.james.task.TaskManager;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
import org.apache.james.webadmin.Routes;
@@ -48,6 +55,9 @@ import org.apache.james.webadmin.dto.QuotaDTO;
import org.apache.james.webadmin.dto.QuotaDetailsDTO;
import org.apache.james.webadmin.dto.ValidatedQuotaDTO;
import org.apache.james.webadmin.service.UserQuotaService;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import org.apache.james.webadmin.tasks.TaskIdDto;
+import org.apache.james.webadmin.tasks.TaskRegistrationKey;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
import org.apache.james.webadmin.utils.JsonExtractException;
@@ -67,6 +77,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import spark.Request;
+import spark.Route;
import spark.Service;
@Api(tags = "UserQuota")
@@ -74,6 +85,16 @@ import spark.Service;
@Produces("application/json")
public class UserQuotaRoutes implements Routes {
+ public static final String USER_QUOTAS_OPERATIONS_INJECTION_KEY = "userQuotasOperations";
+
+ public static class RecomputeCurrentQuotasRequestToTask extends TaskFromRequestRegistry.TaskRegistration {
+ @Inject
+ public RecomputeCurrentQuotasRequestToTask(RecomputeCurrentQuotasService service) {
+ super(RECOMPUTE_CURRENT_QUOTAS, request -> new RecomputeCurrentQuotasTask(service));
+ }
+ }
+
+ private static final TaskRegistrationKey RECOMPUTE_CURRENT_QUOTAS = TaskRegistrationKey.of("RecomputeCurrentQuotas");
private static final String USER = "user";
private static final String MIN_OCCUPATION_RATIO = "minOccupationRatio";
private static final String MAX_OCCUPATION_RATIO = "maxOccupationRatio";
@@ -88,15 +109,24 @@ public class UserQuotaRoutes implements Routes {
private final JsonTransformer jsonTransformer;
private final JsonExtractor<QuotaDTO> jsonExtractor;
private final QuotaDTOValidator quotaDTOValidator;
+ private final TaskManager taskManager;
+ private final Set<TaskFromRequestRegistry.TaskRegistration> usersQuotasTaskRegistration;
private Service service;
@Inject
- public UserQuotaRoutes(UsersRepository usersRepository, UserQuotaService userQuotaService, JsonTransformer jsonTransformer, Set<JsonTransformerModule> modules) {
+ public UserQuotaRoutes(UsersRepository usersRepository,
+ UserQuotaService userQuotaService,
+ JsonTransformer jsonTransformer,
+ Set<JsonTransformerModule> modules,
+ TaskManager taskManager,
+ @Named(USER_QUOTAS_OPERATIONS_INJECTION_KEY) Set<TaskFromRequestRegistry.TaskRegistration> usersQuotasTaskRegistration) {
this.usersRepository = usersRepository;
this.userQuotaService = userQuotaService;
this.jsonTransformer = jsonTransformer;
this.jsonExtractor = new JsonExtractor<>(QuotaDTO.class, modules.stream().map(JsonTransformerModule::asJacksonModule).collect(Collectors.toList()));
this.quotaDTOValidator = new QuotaDTOValidator();
+ this.taskManager = taskManager;
+ this.usersQuotasTaskRegistration = usersQuotasTaskRegistration;
}
@Override
@@ -120,6 +150,33 @@ public class UserQuotaRoutes implements Routes {
defineUpdateQuota();
defineGetUsersQuota();
+ definePostUsersQuota();
+ definePostUsersQuota()
+ .ifPresent(route -> service.post(USERS_QUOTA_ENDPOINT, route, jsonTransformer));
+ }
+
+ @POST
+ @ApiOperation(value = "Recomputing current quotas of users")
+ @ApiImplicitParams({
+ @ApiImplicitParam(
+ required = true,
+ name = "task",
+ paramType = "query parameter",
+ dataType = "String",
+ defaultValue = "none",
+ example = "?task=RecomputeCurrentQuotas",
+ value = "Compulsory. Only supported value is `RecomputeCurrentQuotas`")
+ })
+ @ApiResponses(value = {
+ @ApiResponse(code = HttpStatus.CREATED_201, message = "Task is created", response = TaskIdDto.class),
+ @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),
+ @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request - details in the returned error message")
+ })
+ public Optional<Route> definePostUsersQuota() {
+ return TaskFromRequestRegistry.builder()
+ .parameterName(TASK_PARAMETER)
+ .registrations(usersQuotasTaskRegistration)
+ .buildAsRouteOptional(taskManager);
}
@PUT
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java
index c3e622a..898d5d6 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java
@@ -20,6 +20,9 @@
package org.apache.james.webadmin.routes;
import org.apache.james.quota.search.QuotaSearchTestSystem;
+import org.apache.james.task.Hostname;
+import org.apache.james.task.MemoryTaskManager;
+import org.apache.james.task.TaskManager;
import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.WebAdminUtils;
import org.apache.james.webadmin.jackson.QuotaModule;
@@ -47,9 +50,13 @@ public class WebAdminQuotaSearchTestSystem {
QuotaModule quotaModule = new QuotaModule();
JsonTransformer jsonTransformer = new JsonTransformer(quotaModule);
+ TaskManager taskManager = new MemoryTaskManager(new Hostname("foo"));
UserQuotaRoutes userQuotaRoutes = new UserQuotaRoutes(quotaSearchTestSystem.getUsersRepository(),
- userQuotaService, jsonTransformer,
- ImmutableSet.of(quotaModule));
+ userQuotaService,
+ jsonTransformer,
+ ImmutableSet.of(quotaModule),
+ taskManager,
+ ImmutableSet.of());
DomainQuotaRoutes domainQuotaRoutes = new DomainQuotaRoutes(
quotaSearchTestSystem.getDomainList(),
new DomainQuotaService(quotaSearchTestSystem.getMaxQuotaManager()),
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org