/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.domain.resource.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.testng.annotations.Test;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.composite.AgentLastAvailabilityPingComposite;
import org.rhq.core.domain.test.AbstractEJB3Test;
@Test(groups = "integration.ejb3")
public class AgentTest extends AbstractEJB3Test {
private long now = System.currentTimeMillis();
public void testSuspectAgentQuery() throws Exception {
List<AgentLastAvailabilityPingComposite> pings;
int i;
getTransactionManager().begin();
try {
EntityManager em = getEntityManager();
// get our baseline, in case you already have data in your DB
Query q = em.createNamedQuery(Agent.QUERY_FIND_ALL_SUSPECT_AGENTS);
q.setParameter("dateThreshold", now - 2500);
int baselineSize = q.getResultList().size();
Agent agent1 = createAgent(em, 1, 1000);
Agent agent2 = createAgent(em, 2, 2000);
Agent agent3 = createAgent(em, 3, 3000);
Agent agent4 = createAgent(em, 4, 4000);
// make sure they were persisted
em.flush();
assert em.find(Agent.class, agent1.getId()) != null;
assert em.find(Agent.class, agent2.getId()) != null;
assert em.find(Agent.class, agent3.getId()) != null;
assert em.find(Agent.class, agent4.getId()) != null;
q = em.createNamedQuery(Agent.QUERY_FIND_ALL_SUSPECT_AGENTS);
q.setParameter("dateThreshold", now - 2500);
pings = q.getResultList();
assert pings.size() == 2 + baselineSize : pings;
i = pings.indexOf(new AgentLastAvailabilityPingComposite(agent3.getId(), null, null, null, false));
assert pings.get(i).getAgentId() == agent3.getId();
assert pings.get(i).getAgentName().equals(agent3.getName());
assert pings.get(i).getRemoteEndpoint().equals(agent3.getRemoteEndpoint());
assert pings.get(i).getLastAvailabilityPing().equals(agent3.getLastAvailabilityPing());
i = pings.indexOf(new AgentLastAvailabilityPingComposite(agent4.getId(), null, null, null, false));
assert pings.get(i).getAgentId() == agent4.getId();
assert pings.get(i).getAgentName().equals(agent4.getName());
assert pings.get(i).getRemoteEndpoint().equals(agent4.getRemoteEndpoint());
assert pings.get(i).getLastAvailabilityPing().equals(agent4.getLastAvailabilityPing());
assert -1 == pings.indexOf(new AgentLastAvailabilityPingComposite(agent2.getId(), null, null, null, false));
assert -1 == pings.indexOf(new AgentLastAvailabilityPingComposite(agent1.getId(), null, null, null, false));
// add an agent with a null in the date column
Agent agent0 = createAgent(em, 0, -1);
assert em.find(Agent.class, agent0.getId()) != null;
pings = q.getResultList();
assert pings.size() == 2 + baselineSize : pings;
i = pings.indexOf(new AgentLastAvailabilityPingComposite(agent3.getId(), null, null, null, false));
assert pings.get(i).getAgentId() == agent3.getId();
assert pings.get(i).getAgentName().equals(agent3.getName());
assert pings.get(i).getRemoteEndpoint().equals(agent3.getRemoteEndpoint());
assert pings.get(i).getLastAvailabilityPing().equals(agent3.getLastAvailabilityPing());
i = pings.indexOf(new AgentLastAvailabilityPingComposite(agent4.getId(), null, null, null, false));
assert pings.get(i).getAgentId() == agent4.getId();
assert pings.get(i).getAgentName().equals(agent4.getName());
assert pings.get(i).getRemoteEndpoint().equals(agent4.getRemoteEndpoint());
assert pings.get(i).getLastAvailabilityPing().equals(agent4.getLastAvailabilityPing());
assert -1 == pings.indexOf(new AgentLastAvailabilityPingComposite(agent2.getId(), null, null, null, false));
assert -1 == pings.indexOf(new AgentLastAvailabilityPingComposite(agent1.getId(), null, null, null, false));
// get all of them, except the one with the null
q.setParameter("dateThreshold", now - 1);
pings = q.getResultList();
assert pings.size() == 4 + baselineSize : pings;
// get none of them
q.setParameter("dateThreshold", now - 10000);
pings = q.getResultList();
assert pings.size() == 0 + baselineSize : pings;
} finally {
getTransactionManager().rollback();
}
}
private Agent createAgent(EntityManager em, int num, long availDateOffsetFromNow) {
Agent agent = new Agent("agent" + num, "address" + num, num, "remoteaddr" + num, "token" + num);
if (availDateOffsetFromNow > 0) {
agent.setLastAvailabilityPing(now - availDateOffsetFromNow);
} else {
agent.setLastAvailabilityPing(null);
}
em.persist(agent);
return agent;
}
}