mirror of
https://github.com/google/nomulus.git
synced 2025-08-30 04:53:16 +02:00
Fix premium list command regressions
This CL fixes bugs introduced when the premium list commands were moved to be server-side commands. Fixes: - omitting the --name parameter actually works now; before it was failing in the local build() call since it uses the name as the @Id and tries to create a key for PremiumListRevision, but key IDs cannot be null. - premium list data larger than about 2K works now (see [] before it was stuffing the list data all into a POST query parameter, and URLs of more than 2K in length were all getting 404s. Fix was changing it to put the inputData param in the POST body. - misc test cleanup ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=119912494
This commit is contained in:
parent
625c34662b
commit
f20b1d89a9
4 changed files with 86 additions and 38 deletions
|
@ -14,34 +14,51 @@
|
|||
|
||||
package com.google.domain.registry.tools;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.common.net.MediaType;
|
||||
import com.google.domain.registry.testing.UriParameters;
|
||||
import com.google.domain.registry.tools.ServerSideCommand.Connection;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* Base class for common testing setup for create and update commands for Premium Lists.
|
||||
*/
|
||||
public final class CreateOrUpdatePremiumListCommandTestCase {
|
||||
public abstract class CreateOrUpdatePremiumListCommandTestCase<
|
||||
T extends CreateOrUpdatePremiumListCommand> extends CommandTestCase<T> {
|
||||
|
||||
@Captor
|
||||
ArgumentCaptor<ImmutableMap<String, String>> urlParamCaptor;
|
||||
|
||||
@Captor
|
||||
ArgumentCaptor<byte[]> requestBodyCaptor;
|
||||
|
||||
static String generateInputData(String premiumTermsPath) throws Exception {
|
||||
Path inputFile = Paths.get(premiumTermsPath);
|
||||
String data = new String(java.nio.file.Files.readAllBytes(inputFile));
|
||||
return data;
|
||||
return Files.toString(new File(premiumTermsPath), StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
static void verifySentParams(
|
||||
void verifySentParams(
|
||||
Connection connection, String path, ImmutableMap<String, String> parameterMap)
|
||||
throws Exception {
|
||||
verify(connection).send(
|
||||
eq(path),
|
||||
eq(parameterMap),
|
||||
eq(MediaType.PLAIN_TEXT_UTF_8),
|
||||
eq(new byte[0]));
|
||||
urlParamCaptor.capture(),
|
||||
eq(MediaType.FORM_DATA),
|
||||
requestBodyCaptor.capture());
|
||||
assertThat(new ImmutableMap.Builder<String, String>()
|
||||
.putAll(urlParamCaptor.getValue())
|
||||
.putAll(UriParameters.parse(new String(requestBodyCaptor.getValue(), UTF_8)).entries())
|
||||
.build())
|
||||
.containsExactlyEntriesIn(parameterMap);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
package com.google.domain.registry.tools;
|
||||
|
||||
import static com.google.domain.registry.request.JsonResponse.JSON_SAFETY_PREFIX;
|
||||
import static com.google.domain.registry.tools.CreateOrUpdatePremiumListCommandTestCase.generateInputData;
|
||||
import static com.google.domain.registry.tools.CreateOrUpdatePremiumListCommandTestCase.verifySentParams;
|
||||
import static com.google.domain.registry.util.ResourceUtils.readResourceUtf8;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyMapOf;
|
||||
|
@ -38,7 +36,7 @@ import org.mockito.Mock;
|
|||
|
||||
/** Unit tests for {@link CreatePremiumListCommand}. */
|
||||
public class CreatePremiumListCommandTest<C extends CreatePremiumListCommand>
|
||||
extends CommandTestCase<C> {
|
||||
extends CreateOrUpdatePremiumListCommandTestCase<C> {
|
||||
|
||||
@Mock
|
||||
Connection connection;
|
||||
|
@ -50,25 +48,39 @@ public class CreatePremiumListCommandTest<C extends CreatePremiumListCommand>
|
|||
@Before
|
||||
public void init() throws Exception {
|
||||
command.setConnection(connection);
|
||||
premiumTermsPath = writeToTmpFile(readResourceUtf8(
|
||||
CreatePremiumListCommandTest.class,
|
||||
"testdata/example_premium_terms.csv"));
|
||||
premiumTermsPath = writeToNamedTmpFile(
|
||||
"example_premium_terms.csv",
|
||||
readResourceUtf8(
|
||||
CreatePremiumListCommandTest.class,
|
||||
"testdata/example_premium_terms.csv"));
|
||||
servletPath = "/_dr/admin/createPremiumList";
|
||||
when(connection.send(
|
||||
eq(CreatePremiumListAction.PATH),
|
||||
anyMapOf(String.class, String.class),
|
||||
eq(MediaType.PLAIN_TEXT_UTF_8),
|
||||
any(MediaType.class),
|
||||
any(byte[].class)))
|
||||
.thenReturn(JSON_SAFETY_PREFIX + "{\"status\":\"success\",\"lines\":[]}");
|
||||
.thenReturn(JSON_SAFETY_PREFIX + "{\"status\":\"success\",\"lines\":[]}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun() throws Exception {
|
||||
ImmutableMap<String, String> params =
|
||||
ImmutableMap.of("name", "foo", "inputData", generateInputData(premiumTermsPath));
|
||||
runCommandForced("-i=" + premiumTermsPath, "-n=foo");
|
||||
assertInStdout("Successfully");
|
||||
verifySentParams(connection, servletPath, params);
|
||||
verifySentParams(
|
||||
connection,
|
||||
servletPath,
|
||||
ImmutableMap.of("name", "foo", "inputData", generateInputData(premiumTermsPath)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_noProvidedName_usesBasenameOfInputFile() throws Exception {
|
||||
runCommandForced("-i=" + premiumTermsPath);
|
||||
assertInStdout("Successfully");
|
||||
verifySentParams(
|
||||
connection,
|
||||
servletPath,
|
||||
ImmutableMap.of(
|
||||
"name", "example_premium_terms", "inputData", generateInputData(premiumTermsPath)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -78,9 +90,10 @@ public class CreatePremiumListCommandTest<C extends CreatePremiumListCommand>
|
|||
when(connection.send(
|
||||
eq(CreatePremiumListAction.PATH),
|
||||
anyMapOf(String.class, String.class),
|
||||
eq(MediaType.PLAIN_TEXT_UTF_8),
|
||||
any(MediaType.class),
|
||||
any(byte[].class)))
|
||||
.thenReturn(JSON_SAFETY_PREFIX + "{\"status\":\"error\",\"error\":\"foo already exists\"}");
|
||||
.thenReturn(
|
||||
JSON_SAFETY_PREFIX + "{\"status\":\"error\",\"error\":\"foo already exists\"}");
|
||||
thrown.expect(VerifyException.class, "Server error:");
|
||||
runCommandForced("-i=" + premiumTermsPath, "-n=foo");
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
package com.google.domain.registry.tools;
|
||||
|
||||
import static com.google.domain.registry.request.JsonResponse.JSON_SAFETY_PREFIX;
|
||||
import static com.google.domain.registry.tools.CreateOrUpdatePremiumListCommandTestCase.generateInputData;
|
||||
import static com.google.domain.registry.tools.CreateOrUpdatePremiumListCommandTestCase.verifySentParams;
|
||||
import static com.google.domain.registry.util.ResourceUtils.readResourceUtf8;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyMapOf;
|
||||
|
@ -34,7 +32,7 @@ import org.mockito.Mock;
|
|||
|
||||
/** Unit tests for {@link UpdatePremiumListCommand}. */
|
||||
public class UpdatePremiumListCommandTest<C extends UpdatePremiumListCommand>
|
||||
extends CommandTestCase<C> {
|
||||
extends CreateOrUpdatePremiumListCommandTestCase<C> {
|
||||
|
||||
@Mock
|
||||
Connection connection;
|
||||
|
@ -47,22 +45,36 @@ public class UpdatePremiumListCommandTest<C extends UpdatePremiumListCommand>
|
|||
public void init() throws Exception {
|
||||
command.setConnection(connection);
|
||||
servletPath = "/_dr/admin/updatePremiumList";
|
||||
premiumTermsPath = writeToTmpFile(readResourceUtf8(
|
||||
UpdatePremiumListCommandTest.class,
|
||||
"testdata/example_premium_terms.csv"));
|
||||
premiumTermsPath = writeToNamedTmpFile(
|
||||
"example_premium_terms.csv",
|
||||
readResourceUtf8(
|
||||
UpdatePremiumListCommandTest.class,
|
||||
"testdata/example_premium_terms.csv"));
|
||||
when(connection.send(
|
||||
eq(UpdatePremiumListAction.PATH),
|
||||
anyMapOf(String.class, String.class),
|
||||
eq(MediaType.PLAIN_TEXT_UTF_8),
|
||||
any(MediaType.class),
|
||||
any(byte[].class)))
|
||||
.thenReturn(JSON_SAFETY_PREFIX + "{\"status\":\"success\",\"lines\":[]}");
|
||||
.thenReturn(JSON_SAFETY_PREFIX + "{\"status\":\"success\",\"lines\":[]}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun() throws Exception {
|
||||
ImmutableMap<String, String> params =
|
||||
ImmutableMap.of("name", "foo", "inputData", generateInputData(premiumTermsPath));
|
||||
runCommandForced("-i=" + premiumTermsPath, "-n=foo");
|
||||
verifySentParams(connection, servletPath, params);
|
||||
verifySentParams(
|
||||
connection,
|
||||
servletPath,
|
||||
ImmutableMap.of("name", "foo", "inputData", generateInputData(premiumTermsPath)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRun_noProvidedName_usesBasenameOfInputFile() throws Exception {
|
||||
runCommandForced("-i=" + premiumTermsPath);
|
||||
assertInStdout("Successfully");
|
||||
verifySentParams(
|
||||
connection,
|
||||
servletPath,
|
||||
ImmutableMap.of(
|
||||
"name", "example_premium_terms", "inputData", generateInputData(premiumTermsPath)));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue