mirror of
https://github.com/google/nomulus.git
synced 2025-05-02 13:07:50 +02:00
This fixes a bug in the interaction between ListObjectsAction and ListObjectsCommand/AppEngineConnection. ListObjectsAction was returning HTTP status code 400 when it caught an IAE, but also attempting to return a JSON response payload of {"status": "error", "error": "<exception message>"}. However, AppEngineConnection treats any HTTP error response as more like a crash on the server side - it attempts to scrape the error message out of the autogenerated HTML that AppEngine produces for uncaught exceptions, and throws an exception, killing ListObjectsCommand before it can extract the JSON which contains the nicer error (that stating the missing field, etc versus just "400 Bad Request"). The fix is just to have ListObjectsAction return a 200 and the error message so that ListObjectsCommand can correctly handle it. I also de-scoped the catch to only catching IAE, since catching Exception was overbroad, and the only "expected" exception to be thrown is an IAE from the checkArgument() that tests if the requested fields all exist. Any other kinds of exceptions should actually just bubble up and kill the action, and get the regular AppEngineConnection error treatment. I also added "billingId" as an alias for "billingIdentifier", parallel to clientId/clientIdentifier, since that's why I came across this issue in the first place. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=148248834
80 lines
2.1 KiB
Java
80 lines
2.1 KiB
Java
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed 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 google.registry.tools.server;
|
|
|
|
import static google.registry.testing.DatastoreHelper.createTld;
|
|
|
|
import com.google.common.base.Optional;
|
|
import google.registry.testing.FakeClock;
|
|
import org.joda.time.DateTime;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.junit.runners.JUnit4;
|
|
|
|
/**
|
|
* Unit tests for {@link ListTldsAction}.
|
|
*/
|
|
@RunWith(JUnit4.class)
|
|
public class ListTldsActionTest extends ListActionTestCase {
|
|
|
|
ListTldsAction action;
|
|
|
|
@Before
|
|
public void init() throws Exception {
|
|
createTld("xn--q9jyb4c");
|
|
action = new ListTldsAction();
|
|
action.clock = new FakeClock(DateTime.parse("2000-01-01TZ"));
|
|
}
|
|
|
|
@Test
|
|
public void testRun_noParameters() throws Exception {
|
|
testRunSuccess(action, null, null, null, "xn--q9jyb4c");
|
|
}
|
|
|
|
@Test
|
|
public void testRun_withParameters() throws Exception {
|
|
testRunSuccess(
|
|
action,
|
|
Optional.of("tldType"),
|
|
null,
|
|
null,
|
|
"TLD tldType",
|
|
"----------- -------",
|
|
"xn--q9jyb4c REAL ");
|
|
}
|
|
|
|
@Test
|
|
public void testRun_withWildcard() throws Exception {
|
|
testRunSuccess(
|
|
action,
|
|
Optional.of("*"),
|
|
null,
|
|
null,
|
|
"^TLD .*tldType",
|
|
"^----------- .*-------",
|
|
"^xn--q9jyb4c .*REAL ");
|
|
}
|
|
|
|
@Test
|
|
public void testRun_withBadField_returnsError() throws Exception {
|
|
testRunError(
|
|
action,
|
|
Optional.of("badfield"),
|
|
null,
|
|
null,
|
|
"^Field 'badfield' not found - recognized fields are:");
|
|
}
|
|
}
|