aboutsummaryrefslogtreecommitdiffstats
path: root/odl-aaa-moon/aaa/aaa-shiro/src/test/java/org/opendaylight/aaa/shiro/filters/AuthenticationListenerTest.java
blob: 1c8235253d5e73064b27b8d46659981cbf260e58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright (c) 2016 Brocade Communications Systems, Inc. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */

package org.opendaylight.aaa.shiro.filters;

import static org.junit.Assert.*;

import ch.qos.logback.classic.spi.LoggingEvent;

import java.util.List;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.junit.Test;
import org.opendaylight.aaa.shiro.TestAppender;
import org.opendaylight.aaa.shiro.filters.AuthenticationListener;

/**
 * Test AuthenticationListener, which is responsible for logging Accounting events.
 *
 * @author Ryan Goulding (ryandgoulding@gmail.com)
 */
public class AuthenticationListenerTest {

    @Test
    public void testOnSuccess() throws Exception {
        // sets up a successful authentication attempt
        final AuthenticationListener authenticationListener = new AuthenticationListener();
        final UsernamePasswordToken authenticationToken = new UsernamePasswordToken();
        authenticationToken.setUsername("successfulUser1");
        authenticationToken.setHost("successfulHost1");
        final SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo();
        // the following call produces accounting output
        authenticationListener.onSuccess(authenticationToken, simpleAuthenticationInfo);

        // grab the latest log output and make sure it is in line with what is expected
        final List<LoggingEvent> loggingEvents = TestAppender.getCurrentInstance().getEvents();
        // the latest logging event is the one we need to inspect
        final int whichLoggingEvent = loggingEvents.size() - 1;
        final LoggingEvent latestLoggingEvent = loggingEvents.get(whichLoggingEvent);
        final String latestLogMessage = latestLoggingEvent.getMessage();
        assertEquals("Successful authentication attempt by successfulUser1 from successfulHost1",
                latestLogMessage);
    }

    @Test
    public void testOnFailure() throws Exception {
        // variables for an unsucessful authentication attempt
        final AuthenticationListener authenticationListener = new AuthenticationListener();
        final UsernamePasswordToken authenticationToken = new UsernamePasswordToken();
        authenticationToken.setUsername("unsuccessfulUser1");
        authenticationToken.setHost("unsuccessfulHost1");
        final AuthenticationException authenticationException =
                new AuthenticationException("test auth exception");
        // produces unsuccessful authentication attempt output
        authenticationListener.onFailure(authenticationToken, authenticationException);

        // grab the latest log output and ensure it is in line with what is expected
        final List<LoggingEvent> loggingEvents = TestAppender.getCurrentInstance().getEvents();
        final int whichLoggingEvent = loggingEvents.size() - 1;
        final LoggingEvent latestLoggingEvent = loggingEvents.get(whichLoggingEvent);
        final String latestLogMessage = latestLoggingEvent.getMessage();
        assertEquals("Unsuccessful authentication attempt by unsuccessfulUser1 from unsuccessfulHost1",
                latestLogMessage);
    }
}