Fix NPE in GetHistoryEntriesCommand

The code was not checking the value returned by getTrid() to make sure it was
not null.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=172384499
This commit is contained in:
mountford 2017-05-07 15:06:14 -04:00 committed by jianglai
parent 07240162a2
commit 108deb7f9d
3 changed files with 90 additions and 5 deletions

View file

@ -31,6 +31,7 @@ import google.registry.model.annotations.ReportedOn;
import google.registry.model.domain.Period;
import google.registry.model.eppcommon.Trid;
import java.util.Set;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
/** A record of an EPP command that mutated a resource. */
@ -121,8 +122,8 @@ public class HistoryEntry extends ImmutableObject implements Buildable {
*/
String otherClientId;
/** Transaction id that made this change. */
Trid trid;
/** Transaction id that made this change, or null if the entry was not created by a flow. */
@Nullable Trid trid;
/** Whether this change was created by a superuser. */
boolean bySuperuser;
@ -170,7 +171,8 @@ public class HistoryEntry extends ImmutableObject implements Buildable {
return otherClientId;
}
public Trid getTrid() {
/** Returns the TRID, which may be null if the entry was not created by a normal flow. */
@Nullable public Trid getTrid() {
return trid;
}

View file

@ -77,8 +77,8 @@ final class GetHistoryEntriesCommand implements RemoteApiCommand {
"Client: %s\nTime: %s\nClient TRID: %s\nServer TRID: %s\n%s\n",
entry.getClientId(),
entry.getModificationTime(),
entry.getTrid().getClientTransactionId(),
entry.getTrid().getServerTransactionId(),
(entry.getTrid() == null) ? null : entry.getTrid().getClientTransactionId(),
(entry.getTrid() == null) ? null : entry.getTrid().getServerTransactionId(),
entry.getXmlBytes() == null
? String.format("[no XML stored for %s]\n", entry.getType())
: XmlTransformer.prettyPrint(entry.getXmlBytes()));

View file

@ -0,0 +1,83 @@
// 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;
import static google.registry.testing.DatastoreHelper.createTld;
import static google.registry.testing.DatastoreHelper.persistActiveDomain;
import static google.registry.testing.DatastoreHelper.persistResource;
import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry;
import google.registry.model.domain.DomainResource;
import google.registry.model.domain.Period;
import google.registry.model.reporting.HistoryEntry;
import google.registry.testing.FakeClock;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
/** Unit tests for {@link GetClaimsListCommand}. */
public class GetHistoryEntriesCommandTest extends CommandTestCase<GetHistoryEntriesCommand> {
private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01T00:00:00Z"));
private DomainResource domain;
@Before
public void setup() {
createTld("tld");
domain = persistActiveDomain("example.tld");
}
@Test
public void testSuccess_works() throws Exception {
persistResource(
makeHistoryEntry(
domain,
HistoryEntry.Type.DOMAIN_CREATE,
Period.create(1, Period.Unit.YEARS),
"created",
clock.nowUtc()));
runCommand("--id=example.tld", "--type=DOMAIN");
assertStdoutIs(
"Client: foo\n"
+ "Time: 2000-01-01T00:00:00.000Z\n"
+ "Client TRID: ABC-123\n"
+ "Server TRID: server-trid\n"
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><xml/>\n"
+ "\n");
}
@Test
public void testSuccess_noTrid() throws Exception {
persistResource(
makeHistoryEntry(
domain,
HistoryEntry.Type.DOMAIN_CREATE,
Period.create(1, Period.Unit.YEARS),
"created",
clock.nowUtc())
.asBuilder()
.setTrid(null)
.build());
runCommand("--id=example.tld", "--type=DOMAIN");
assertStdoutIs(
"Client: foo\n"
+ "Time: 2000-01-01T00:00:00.000Z\n"
+ "Client TRID: null\n"
+ "Server TRID: null\n"
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><xml/>\n"
+ "\n");
}
}