package org.openstack.atlas.util.snmp;
import java.lang.reflect.Field;
import org.junit.Assert;
import org.apache.log4j.BasicConfigurator;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.openstack.atlas.util.snmp.exceptions.StingraySnmpGeneralException;
import org.openstack.atlas.util.snmp.exceptions.StingraySnmpRetryExceededException;
import org.openstack.atlas.util.snmp.exceptions.StingraySnmpSetupException;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.VariableBinding;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.openstack.atlas.util.snmp.StingraySnmpClient.getOidFromVirtualServerName;
import static org.openstack.atlas.util.snmp.StingraySnmpClient.getVirtualServerNameFromOid;
public class StingraySnmpClientTest {
public String baseOid;
public StingraySnmpClient client;
public String address;
public String port;
public String community;
public Map<String, String> knownOidMaps;
public StingraySnmpClientTest() {
}
@Before
public void setUp() {
BasicConfigurator.configure();
address = "10.12.99.19";
port = "1161";
community = "public";
client = new StingraySnmpClient();
client.setMaxRetrys(1);
client.setAddress(address);
client.setCommunity(community);
client.setPort("1161");
baseOid = "1.3.6.1.4.1.7146.1.2.2.2.1.9";
knownOidMaps = new HashMap<String, String>();
knownOidMaps.put("1.3.6.1.4.1.7146.1.2.2.2.1.9.8.77.121.115.113.108.95.86.83", "Mysql_VS");
knownOidMaps.put("1.3.6.1.4.1.7146.1.2.2.2.1.9.15.108.98.97.97.115.95.97.100.109.105.110.95.97.112.105", "lbaas_admin_api");
knownOidMaps.put("1.3.6.1.4.1.7146.1.2.2.2.1.9.16.108.98.97.97.115.95.112.117.98.108.105.99.95.97.112.105", "lbaas_public_api");
baseOid = "1.3.6.1.4.1.7146.1.2.2.2.1.9";
}
@Ignore
@Test
public void shouldReturnVariableBindingList() throws Exception {
assertTrue(client.getBulkOidBindingList(OIDConstants.VS_CURRENT_CONNECTIONS).size() > 0);
}
@Ignore
@Test
public void shouldReturnMapOfStringByRawUsage() throws Exception {
Map<String, RawSnmpUsage> map = client.getSnmpUsage();
assertTrue(map.entrySet().size() > 0);
}
@Ignore
@Test
public void shouldFailWithInvalidAddress() throws Exception {
client.setAddress("10.1000.1.1");
try {
client.getBulkOidBindingList(OIDConstants.VS_CURRENT_CONNECTIONS);
} catch (Exception ex) {
assertTrue(ex instanceof StingraySnmpGeneralException);
}
Assert.fail();
}
@Ignore
@Test
public void shouldFailWithIncorrectPort() throws Exception {
client.setPort("1111");
try {
client.getBulkOidBindingList(OIDConstants.VS_CURRENT_CONNECTIONS);
} catch (Exception ex) {
assertTrue(ex instanceof StingraySnmpGeneralException);
return;
}
Assert.fail();
}
@Ignore
@Test
public void shouldFailWithInvalidCommunity() throws Exception {
client.setCommunity("expensivePradaBag");
try {
client.getBulkOidBindingList(OIDConstants.VS_CURRENT_CONNECTIONS);
} catch (Exception ex) {
assertTrue(ex instanceof StingraySnmpGeneralException);
return;
}
Assert.fail();
}
@Test
public void testVsNameFromOid() {
for (Entry<String, String> ent : knownOidMaps.entrySet()) {
String oid = ent.getKey();
String vsName = ent.getValue();
assertEquals(vsName, getVirtualServerNameFromOid(baseOid, oid));
}
}
@Test
public void testOidFromVsName() {
for (Entry<String, String> ent : knownOidMaps.entrySet()) {
String oid = ent.getKey();
String vsName = ent.getValue();
assertEquals(oid, getOidFromVirtualServerName(baseOid, vsName));
}
}
@Ignore
@Test
public void testSingleVsByteCountRequest() throws Exception {
VariableBinding variableBinding = client.getBulkOidBindingList(OIDConstants.VS_BYTES_OUT).get(0);
String name = getVirtualServerNameFromOid(baseOid, variableBinding.getOid().toString());
Long value = client.getLongValueForVirtualServer(name, OIDConstants.VS_BYTES_OUT, false, false);
assertTrue(value >= 0);
variableBinding = client.getBulkOidBindingList(OIDConstants.VS_BYTES_IN).get(0);
name = getVirtualServerNameFromOid(baseOid, variableBinding.getOid().toString());
value = client.getLongValueForVirtualServer(name, OIDConstants.VS_BYTES_IN, false, false);
assertTrue(value >= 0);
variableBinding = client.getBulkOidBindingList(OIDConstants.VS_CURRENT_CONNECTIONS).get(0);
name = getVirtualServerNameFromOid(baseOid, variableBinding.getOid().toString());
value = client.getLongValueForVirtualServer(name, OIDConstants.VS_CURRENT_CONNECTIONS, false, false);
assertTrue(value >= 0);
}
@Test
public void testIncRequestIdShouldAlwaysReturnPositive() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
int requestId;
Field requestIdField = StingraySnmpClient.class.getDeclaredField("requestId");
requestIdField.setAccessible(true);
requestId = requestIdField.getInt(null);
assertTrue(requestId == StingraySnmpClient.getRequestId());
requestIdField.setInt(null, Integer.MAX_VALUE - 5);
assertFalse(StingraySnmpClient.getRequestId() == 0);
assertTrue(StingraySnmpClient.getRequestId() == Integer.MAX_VALUE - 5);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == Integer.MAX_VALUE - 4);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == Integer.MAX_VALUE - 3);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == Integer.MAX_VALUE - 2);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == Integer.MAX_VALUE - 1);
assertTrue(requestId >= 0);
// instead of reaching MAX_VALUE the requestId should have fliped to zero
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 0);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 1);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 2);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 3);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 4);
assertTrue(requestId >= 0);
StingraySnmpClient.incRequestId();
requestId = StingraySnmpClient.getRequestId();
assertTrue(requestId == 5);
assertTrue(requestId >= 0);
}
}