/**
* Copyright (c) 2009 - 2012 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package org.candlepin.resource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.candlepin.cache.CandlepinCache;
import org.candlepin.cache.StatusCache;
import org.candlepin.common.config.Configuration;
import org.candlepin.controller.ModeManager;
import org.candlepin.model.CandlepinModeChange;
import org.candlepin.model.CandlepinQuery;
import org.candlepin.model.Rules;
import org.candlepin.model.RulesCurator;
import org.candlepin.model.Status;
import org.candlepin.model.CandlepinModeChange.Mode;
import org.candlepin.model.CandlepinModeChange.Reason;
import org.candlepin.policy.js.JsRunnerProvider;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.Appender;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Date;
/**
* StatusResourceTest
*/
public class StatusResourceTest {
@Mock private RulesCurator rulesCurator;
@Mock private Configuration config;
@Mock private JsRunnerProvider jsProvider;
@Mock private CandlepinCache candlepinCache;
@Mock private StatusCache mockedStatusCache;
@Mock private ModeManager modeManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
CandlepinModeChange mockModeChange =
new CandlepinModeChange(new Date(), Mode.NORMAL, Reason.STARTUP);
CandlepinQuery mockCPQuery = mock(CandlepinQuery.class);
when(mockCPQuery.list()).thenReturn(new ArrayList<Rules>());
when(rulesCurator.listAll()).thenReturn(mockCPQuery);
when(rulesCurator.getRules()).thenReturn(new Rules("// Version: 2.0\nBLAH"));
when(mockedStatusCache.getStatus()).thenReturn(null);
when(candlepinCache.getStatusCache()).thenReturn(mockedStatusCache);
when(modeManager.getLastCandlepinModeChange()).thenReturn(mockModeChange);
}
@Test
public void status() throws Exception {
PrintStream ps = new PrintStream(new File(this.getClass()
.getClassLoader().getResource("version.properties").toURI()));
ps.println("version=${version}");
ps.println("release=${release}");
StatusResource sr = new StatusResource(rulesCurator, config, jsProvider, candlepinCache,
modeManager);
Status s = sr.status();
ps.close();
assertNotNull(s);
assertEquals("${release}", s.getRelease());
assertEquals("${version}", s.getVersion());
assertTrue(s.getResult());
}
@Test
public void unknown() throws Exception {
PrintStream ps = new PrintStream(new File(this.getClass()
.getClassLoader().getResource("version.properties").toURI()));
ps.println("foo");
StatusResource sr = new StatusResource(rulesCurator, config, jsProvider, candlepinCache,
modeManager);
Status s = sr.status();
ps.close();
assertNotNull(s);
assertEquals("Unknown", s.getRelease());
assertEquals("Unknown", s.getVersion());
assertTrue(s.getResult());
}
@Test
public void testDBDown() throws Exception {
PrintStream ps = new PrintStream(new File(this.getClass()
.getClassLoader().getResource("version.properties").toURI()));
ps.println("version=${version}");
ps.println("release=${release}");
when(rulesCurator.getUpdatedFromDB()).thenThrow(new RuntimeException());
StatusResource sr = new StatusResource(rulesCurator, config, jsProvider, candlepinCache,
modeManager);
Status s = sr.status();
ps.close();
assertNotNull(s);
assertEquals("${release}", s.getRelease());
assertEquals("${version}", s.getVersion());
assertFalse(s.getResult());
}
@Test
public void simulateVersionFilter() throws Exception {
// setup logger to see if we actually log anything
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger srLogger = lc.getLogger(StatusResource.class);
Appender mockapp = mock(Appender.class);
srLogger.addAppender(mockapp);
srLogger.setLevel(Level.DEBUG);
ArgumentCaptor<LoggingEvent> message = ArgumentCaptor.forClass(LoggingEvent.class);
PrintStream ps = new PrintStream(new File(this.getClass()
.getClassLoader().getResource("version.properties").toURI()));
ps.println("version=${version}");
ps.println("release=${release}");
StatusResource sr = new StatusResource(rulesCurator, config, jsProvider, candlepinCache,
modeManager);
Status s = sr.status();
ps.close();
// make sure we did not log anything which indicates
// an exception
verify(mockapp, never()).doAppend(message.capture());
assertEquals("${release}", s.getRelease());
assertEquals("${version}", s.getVersion());
assertTrue(s.getResult());
assertFalse(s.getStandalone());
}
}