Add an HTTP header to response from Nomulus after successful login (#879)

* Add a logged-in response header

* small fixes

* Refactor EPP test cases to check for headers

* small change
This commit is contained in:
sarahcaseybot 2020-12-01 19:24:56 -05:00 committed by GitHub
parent 2621448f5e
commit 59c852d812
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 96 additions and 12 deletions

View file

@ -501,7 +501,7 @@ class EppLifecycleDomainTest extends EppTestCase {
@Test
void testEapDomainDeletion_withinAddGracePeriod_eapFeeIsNotRefunded() throws Exception {
assertThatCommand("login_valid_fee_extension.xml").hasResponse("generic_success_response.xml");
assertThatCommand("login_valid_fee_extension.xml").hasSuccessfulLogin();
createContacts(DateTime.parse("2000-06-01T00:00:00Z"));
// Set the EAP schedule.
@ -718,7 +718,7 @@ class EppLifecycleDomainTest extends EppTestCase {
START_OF_TIME, PREDELEGATION,
gaDate, GENERAL_AVAILABILITY));
assertThatCommand("login_valid_fee_extension.xml").hasResponse("generic_success_response.xml");
assertThatCommand("login_valid_fee_extension.xml").hasSuccessfulLogin();
assertThatCommand("domain_check_fee_premium.xml")
.atTime(gaDate.plusDays(1))
@ -1196,7 +1196,7 @@ class EppLifecycleDomainTest extends EppTestCase {
assertThatLogin("NewRegistrar", "foo-BAR2")
.atTime(sunriseDate.minusDays(3))
.hasResponse("generic_success_response.xml");
.hasSuccessfulLogin();
createContactsAndHosts();
@ -1292,7 +1292,7 @@ class EppLifecycleDomainTest extends EppTestCase {
assertThatLogin("NewRegistrar", "foo-BAR2")
.atTime(sunriseDate.minusDays(3))
.hasResponse("generic_success_response.xml");
.hasSuccessfulLogin();
createContactsAndHosts();

View file

@ -121,6 +121,10 @@ public class EppTestCase {
return assertCommandAndResponse(
inputFilename, inputSubstitutions, outputFilename, outputSubstitutions, now);
}
public String hasSuccessfulLogin() throws Exception {
return assertLoginCommandAndResponse(inputFilename, inputSubstitutions, null, now);
}
}
protected CommandAsserter assertThatCommand(String inputFilename) {
@ -137,13 +141,33 @@ public class EppTestCase {
}
protected void assertThatLoginSucceeds(String clientId, String password) throws Exception {
assertThatLogin(clientId, password).hasResponse("generic_success_response.xml");
assertThatLogin(clientId, password).hasSuccessfulLogin();
}
protected void assertThatLogoutSucceeds() throws Exception {
assertThatCommand("logout.xml").hasResponse("logout_response.xml");
}
private String assertLoginCommandAndResponse(
String inputFilename,
@Nullable Map<String, String> inputSubstitutions,
@Nullable Map<String, String> outputSubstitutions,
DateTime now)
throws Exception {
String outputFilename = "generic_success_response.xml";
clock.setTo(now);
String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions);
String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions);
setUpSession();
FakeResponse response = executeXmlCommand(input);
// Check that the logged-in header was added to the response
assertThat(response.getHeaders()).isEqualTo(ImmutableMap.of("Logged-In", "true"));
return verifyAndReturnOutput(
response.getPayload(), expectedOutput, inputFilename, outputFilename);
}
private String assertCommandAndResponse(
String inputFilename,
@Nullable Map<String, String> inputSubstitutions,
@ -154,6 +178,18 @@ public class EppTestCase {
clock.setTo(now);
String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions);
String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions);
setUpSession();
FakeResponse response = executeXmlCommand(input);
// Checks that the Logged-In header is not in the response. If testing the login command, use
// assertLoginCommandAndResponse instead of this method.
assertThat(response.getHeaders()).doesNotContainEntry("Logged-In", "true");
return verifyAndReturnOutput(
response.getPayload(), expectedOutput, inputFilename, outputFilename);
}
private void setUpSession() {
if (sessionMetadata == null) {
sessionMetadata =
new HttpSessionMetadata(new FakeHttpSession()) {
@ -165,7 +201,13 @@ public class EppTestCase {
}
};
}
String actualOutput = executeXmlCommand(input);
}
private String verifyAndReturnOutput(
String actualOutput, String expectedOutput, String inputFilename, String outputFilename)
throws Exception {
// Run the resulting xml through the unmarshaller to verify that it was valid.
EppXmlTransformer.validateOutput(actualOutput);
assertXmlEqualsWithMessage(
expectedOutput,
actualOutput,
@ -176,7 +218,7 @@ public class EppTestCase {
return actualOutput;
}
private String executeXmlCommand(String inputXml) throws Exception {
private FakeResponse executeXmlCommand(String inputXml) throws Exception {
EppRequestHandler handler = new EppRequestHandler();
FakeResponse response = new FakeResponse();
handler.response = response;
@ -195,10 +237,7 @@ public class EppTestCase {
inputXml.getBytes(UTF_8));
assertThat(response.getStatus()).isEqualTo(SC_OK);
assertThat(response.getContentType()).isEqualTo(APPLICATION_EPP_XML_UTF8);
String result = response.getPayload();
// Run the resulting xml through the unmarshaller to verify that it was valid.
EppXmlTransformer.validateOutput(result);
return result;
return response;
}
EppMetric getRecordedEppMetric() {

View file

@ -14,6 +14,7 @@
package google.registry.flows.session;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.testing.DatabaseHelper.deleteResource;
import static google.registry.testing.DatabaseHelper.loadRegistrar;
import static google.registry.testing.DatabaseHelper.persistResource;
@ -32,6 +33,7 @@ import google.registry.flows.session.LoginFlow.PasswordChangesNotSupportedExcept
import google.registry.flows.session.LoginFlow.RegistrarAccountNotActiveException;
import google.registry.flows.session.LoginFlow.TooManyFailedLoginsException;
import google.registry.flows.session.LoginFlow.UnsupportedLanguageException;
import google.registry.model.eppoutput.EppOutput;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.Registrar.State;
import org.junit.jupiter.api.BeforeEach;
@ -74,6 +76,14 @@ public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
doSuccessfulTest("login_valid.xml");
}
@Test
void testSuccess_setsIsLoginResponse() throws Exception {
setEppInput("login_valid.xml");
assertTransactionalFlow(false);
EppOutput output = runFlow();
assertThat(output.getResponse().isLoginResponse()).isTrue();
}
@Test
void testSuccess_suspendedRegistrar() throws Exception {
persistResource(getRegistrarBuilder().setState(State.SUSPENDED).build());