blob: 33214693817310e3ee33a6137a0f8ef2770f7d96 [file] [log] [blame]
// Copyright (C) 2014 The Android Open Source Project
//
// 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 com.ericsson.gerrit.plugins.eventslog;
import static com.google.common.truth.Truth.assertThat;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import org.junit.Before;
import org.junit.Test;
import com.google.gerrit.server.CurrentUser;
import com.google.inject.Provider;
import com.ericsson.gerrit.plugins.eventslog.EventsRestApiServlet;
import com.ericsson.gerrit.plugins.eventslog.EventStore;
import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
public class EventsRestApiServletTest {
private EasyMockSupport easyMock;
private EventStore storeMock;
private QueryMaker queryMakerMock;
private Provider<CurrentUser> userProviderMock;
private CurrentUser userMock;
private HttpServletRequest reqMock;
private HttpServletResponse rspMock;
private EventsRestApiServlet eventServlet;
@SuppressWarnings("unchecked")
@Before
public void setUp() {
easyMock = new EasyMockSupport();
storeMock = easyMock.createNiceMock(EventStore.class);
queryMakerMock = easyMock.createNiceMock(QueryMaker.class);
userProviderMock = easyMock.createNiceMock(Provider.class);
userMock = easyMock.createNiceMock(CurrentUser.class);
reqMock = easyMock.createNiceMock(HttpServletRequest.class);
rspMock = easyMock.createNiceMock(HttpServletResponse.class);
easyMock.replayAll();
eventServlet = new EventsRestApiServlet(storeMock, queryMakerMock,
userProviderMock);
}
@Test
public void queryStringSplitting() throws Exception {
String queryStringMock = "a=1;b=2";
Map<String, String> paramMock = new HashMap<>();
paramMock.put("a", "1");
paramMock.put("b", "2");
Capture<Map<String, String>> catcher = new Capture<>();
easyMock.resetAll();
expect(userProviderMock.get()).andStubReturn(userMock);
expect(userMock.isIdentifiedUser()).andStubReturn(true);
expect(reqMock.getQueryString()).andStubReturn(queryStringMock);
expect(queryMakerMock.formQueryFromRequestParameters(capture(catcher)))
.andStubReturn("random query");
expect(storeMock.queryChangeEvents("random query")).andStubReturn(
new ArrayList<String>());
easyMock.replayAll();
eventServlet.doGet(reqMock, rspMock);
Map<String, String> capturedParam = catcher.getValue();
assertThat(paramMock).isEqualTo(capturedParam);
}
@Test
public void badQueryString() throws Exception {
String queryStringMock = "a;b";
Capture<Map<String, String>> catcher = new Capture<>();
easyMock.resetAll();
expect(userProviderMock.get()).andStubReturn(userMock);
expect(userMock.isIdentifiedUser()).andStubReturn(true);
expect(reqMock.getQueryString()).andStubReturn(queryStringMock);
expect(queryMakerMock.formQueryFromRequestParameters(capture(catcher)))
.andStubReturn("random query");
expect(storeMock.queryChangeEvents("random query")).andStubReturn(
new ArrayList<String>());
easyMock.replayAll();
eventServlet.doGet(reqMock, rspMock);
Map<String, String> capturedParam = catcher.getValue();
assertThat(capturedParam).isEmpty();
}
@Test
public void testUnAuthorizedCode() throws Exception {
easyMock.resetAll();
expect(userProviderMock.get()).andStubReturn(userMock);
expect(userMock.isIdentifiedUser()).andStubReturn(false);
rspMock.sendError(HttpServletResponse.SC_UNAUTHORIZED);
expectLastCall().once();
easyMock.replayAll();
eventServlet.doGet(reqMock, rspMock);
easyMock.verifyAll();
}
@Test
public void testBadRequestCode() throws Exception {
easyMock.resetAll();
expect(userProviderMock.get()).andStubReturn(userMock);
expect(userMock.isIdentifiedUser()).andStubReturn(true);
expect(queryMakerMock.formQueryFromRequestParameters(
EasyMock.<Map<String, String>> anyObject())).andStubThrow(
new MalformedQueryException());
rspMock.sendError(HttpServletResponse.SC_BAD_REQUEST);
expectLastCall().once();
easyMock.replayAll();
eventServlet.doGet(reqMock, rspMock);
easyMock.verifyAll();
}
@Test
public void queryDatabaseAndWrite() throws Exception {
PrintWriter outMock = easyMock.createMock(PrintWriter.class);
List<String> listMock = new ArrayList<>();
listMock.add("event one");
listMock.add("event two");
easyMock.resetAll();
expect(userProviderMock.get()).andStubReturn(userMock);
expect(userMock.isIdentifiedUser()).andStubReturn(true);
expect(rspMock.getWriter()).andStubReturn(outMock);
expect(storeMock.queryChangeEvents(EasyMock.anyString())).andReturn(
listMock);
outMock.write(listMock.get(0) + "\n");
expectLastCall().once();
outMock.write(listMock.get(1) + "\n");
expectLastCall().once();
easyMock.replayAll();
eventServlet.doGet(reqMock, rspMock);
easyMock.verifyAll();
}
}