mirror of
https://github.com/google/nomulus.git
synced 2025-05-02 21:17:50 +02:00
aka regexing for fun and profit. This also makes sure that there are no statements after the throwing statement, since these would be dead code. There were a surprising number of places with assertions after the throw, and none of these are actually triggered in tests ever. When I found these, I replaced them with try/catch/rethrow which makes the assertions actually happen: before: // This is the ExceptionRule that checks EppException marshaling thrown.expect(FooException.class); doThrowingThing(); assertSomething(); // Dead code! after: try { doThrowingThing(); assertWithMessage("...").fail(); } catch (FooException e) { assertSomething(); // For EppExceptions: assertAboutEppExceptins().that(e).marshalsToXml(); } To make this work, I added EppExceptionSubject. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=135793407
148 lines
5.5 KiB
Java
148 lines
5.5 KiB
Java
// Copyright 2016 The Domain Registry 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.flows.session;
|
|
|
|
import static google.registry.testing.DatastoreHelper.deleteResource;
|
|
import static google.registry.testing.DatastoreHelper.persistResource;
|
|
|
|
import google.registry.flows.EppException.UnimplementedExtensionException;
|
|
import google.registry.flows.EppException.UnimplementedObjectServiceException;
|
|
import google.registry.flows.EppException.UnimplementedProtocolVersionException;
|
|
import google.registry.flows.FlowTestCase;
|
|
import google.registry.flows.TransportCredentials.BadRegistrarPasswordException;
|
|
import google.registry.flows.session.LoginFlow.AlreadyLoggedInException;
|
|
import google.registry.flows.session.LoginFlow.BadRegistrarClientIdException;
|
|
import google.registry.flows.session.LoginFlow.PasswordChangesNotSupportedException;
|
|
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.registrar.Registrar;
|
|
import google.registry.model.registrar.Registrar.State;
|
|
import google.registry.testing.ExceptionRule;
|
|
import org.junit.Before;
|
|
import org.junit.Rule;
|
|
import org.junit.Test;
|
|
|
|
/** Unit tests for {@link LoginFlow}. */
|
|
public abstract class LoginFlowTestCase extends FlowTestCase<LoginFlow> {
|
|
|
|
@Rule
|
|
public final ExceptionRule thrown = new ExceptionRule();
|
|
|
|
Registrar registrar;
|
|
Registrar.Builder registrarBuilder;
|
|
|
|
@Before
|
|
public void initRegistrar() {
|
|
sessionMetadata.setClientId(null); // Don't implicitly log in (all other flows need to).
|
|
registrar = Registrar.loadByClientId("NewRegistrar");
|
|
registrarBuilder = registrar.asBuilder();
|
|
}
|
|
|
|
// Can't inline this since it may be overridden in subclasses.
|
|
protected Registrar.Builder getRegistrarBuilder() {
|
|
return registrarBuilder;
|
|
}
|
|
|
|
// Also called in subclasses.
|
|
void doSuccessfulTest(String xmlFilename) throws Exception {
|
|
setEppInput(xmlFilename);
|
|
assertTransactionalFlow(false);
|
|
runFlowAssertResponse(readFile("login_response.xml"));
|
|
}
|
|
|
|
// Also called in subclasses.
|
|
void doFailingTest(String xmlFilename, Class<? extends Exception> exception)
|
|
throws Exception {
|
|
setEppInput(xmlFilename);
|
|
thrown.expect(exception);
|
|
runFlow();
|
|
}
|
|
|
|
@Test
|
|
public void testSuccess() throws Exception {
|
|
doSuccessfulTest("login_valid.xml");
|
|
}
|
|
|
|
@Test
|
|
public void testSuccess_suspendedRegistrar() throws Exception {
|
|
persistResource(getRegistrarBuilder().setState(State.SUSPENDED).build());
|
|
doSuccessfulTest("login_valid.xml");
|
|
}
|
|
|
|
@Test
|
|
public void testSuccess_missingTypes() throws Exception {
|
|
// We don't actually care if you list all the right types, as long as you don't add wrong ones.
|
|
doSuccessfulTest("login_valid_missing_types.xml");
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_invalidVersion() throws Exception {
|
|
doFailingTest("login_invalid_version.xml", UnimplementedProtocolVersionException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_invalidLanguage() throws Exception {
|
|
doFailingTest("login_invalid_language.xml", UnsupportedLanguageException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_invalidExtension() throws Exception {
|
|
doFailingTest("login_invalid_extension.xml", UnimplementedExtensionException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_invalidTypes() throws Exception {
|
|
doFailingTest("login_invalid_types.xml", UnimplementedObjectServiceException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_newPassword() throws Exception {
|
|
doFailingTest("login_invalid_newpw.xml", PasswordChangesNotSupportedException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_unknownRegistrar() throws Exception {
|
|
deleteResource(getRegistrarBuilder().build());
|
|
doFailingTest("login_valid.xml", BadRegistrarClientIdException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_pendingRegistrar() throws Exception {
|
|
persistResource(getRegistrarBuilder().setState(State.PENDING).build());
|
|
doFailingTest("login_valid.xml", RegistrarAccountNotActiveException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_incorrectPassword() throws Exception {
|
|
persistResource(getRegistrarBuilder().setPassword("diff password").build());
|
|
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_tooManyFailedLogins() throws Exception {
|
|
persistResource(getRegistrarBuilder().setPassword("diff password").build());
|
|
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
|
|
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
|
|
doFailingTest("login_valid.xml", BadRegistrarPasswordException.class);
|
|
doFailingTest("login_valid.xml", TooManyFailedLoginsException.class);
|
|
}
|
|
|
|
@Test
|
|
public void testFailure_alreadyLoggedIn() throws Exception {
|
|
sessionMetadata.setClientId("something");
|
|
doFailingTest("login_valid.xml", AlreadyLoggedInException.class);
|
|
}
|
|
}
|