package org.jboss.test.jbossmx.compliance.objectname;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.jboss.test.jbossmx.compliance.TestCase;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import java.util.Hashtable;
public class MalformedTestCase
extends TestSuite
{
public static final String GOOD_DOMAIN = "domain";
public static final String GOOD_KEY = "key1";
public static final String GOOD_VALUE = "val1";
public static final String[] BAD_KEYVALS = {
"som:thing", "som?thing", "som*thing", "som,thing", "som=thing", };
public static final String[] BAD_DOMAINS = {
"doma:in", };
public static final String[] BAD_FULLNAMES = {
"domain:key=val,key=val2", "domain:=,foo=bar", "domain:key=val,,foo=bar", "domain:,key=val,foo=bar", "domain:key=val,foo=bar,", "domain:key=val, ,foo=bar", };
public MalformedTestCase(String s)
{
super(s);
}
public static Test suite()
{
TestSuite suite = new TestSuite("All Malformed Tests");
suite.addTest(new DomainKeyValueTEST(null, null, null));
suite.addTest(new DomainKeyValueTEST(null, "key1", "val1"));
suite.addTest(new DomainKeyValueTEST("domain", null, "val1"));
suite.addTest(new DomainKeyValueTEST("domain", "key1", null));
suite.addTest(new DomainKeyValueTEST("domain", null, null));
suite.addTest(new DomainHashtableTEST(null, "key1", "val1"));
suite.addTestSuite(DomainHashtableExtraTEST.class);
for (int i = 0; i < BAD_DOMAINS.length; i++)
{
suite.addTest(new FullNameTEST(BAD_DOMAINS[i] + ":" + GOOD_KEY + "=" + GOOD_VALUE));
suite.addTest(new DomainKeyValueTEST(BAD_DOMAINS[i], GOOD_KEY, GOOD_VALUE));
suite.addTest(new DomainHashtableTEST(BAD_DOMAINS[i], GOOD_KEY, GOOD_VALUE));
}
for (int i = 0; i < BAD_KEYVALS.length; i++)
{
suite.addTest(new FullNameTEST(GOOD_DOMAIN + ":" + BAD_KEYVALS[i] + "=" + GOOD_VALUE));
suite.addTest(new FullNameTEST(GOOD_DOMAIN + ":" + GOOD_KEY + "=" + BAD_KEYVALS[i]));
suite.addTest(new DomainKeyValueTEST(GOOD_DOMAIN, BAD_KEYVALS[i], GOOD_VALUE));
suite.addTest(new DomainKeyValueTEST(GOOD_DOMAIN, GOOD_KEY, BAD_KEYVALS[i]));
suite.addTest(new DomainHashtableTEST(GOOD_DOMAIN, BAD_KEYVALS[i], GOOD_VALUE));
suite.addTest(new DomainHashtableTEST(GOOD_DOMAIN, GOOD_KEY, BAD_KEYVALS[i]));
}
for (int i = 0; i < BAD_FULLNAMES.length; i++)
{
suite.addTest(new FullNameTEST(BAD_FULLNAMES[i]));
}
return suite;
}
public static class FullNameTEST extends TestCase
{
private String fullName;
public FullNameTEST(String fullName)
{
super("testMalformed");
this.fullName = fullName;
}
public void testMalformed()
{
try
{
ObjectName name = new ObjectName(fullName);
}
catch (MalformedObjectNameException e)
{
if (fullName != null)
{
return;
}
}
catch (NullPointerException e)
{
if (fullName == null)
{
return;
}
}
fail("invalid object name: " + fullName);
}
}
public static class DomainKeyValueTEST extends TestCase
{
private String domain;
private String key;
private String value;
public DomainKeyValueTEST(String domain, String key, String value)
{
super("testMalformed");
this.domain = domain;
this.key = key;
this.value = value;
}
public void testMalformed()
{
try
{
ObjectName name = new ObjectName(domain, key, value);
}
catch (MalformedObjectNameException e)
{
if (domain != null && key != null && value != null)
{
return;
}
}
catch (NullPointerException e)
{
if (domain == null || key == null || value == null)
{
return;
}
}
fail("invalid object name: " + domain + ":" + key + "=" + value);
}
}
public static class DomainHashtableTEST extends TestCase
{
private String domain;
private String key;
private String value;
public DomainHashtableTEST(String domain, String key, String value)
{
super("testMalformed");
this.domain = domain;
this.key = key;
this.value = value;
}
public void testMalformed()
{
try
{
Hashtable h = new Hashtable();
h.put(key, value);
ObjectName name = new ObjectName(domain, h);
}
catch (MalformedObjectNameException e)
{
if (domain != null && key != null && value != null)
{
return;
}
}
catch (NullPointerException e)
{
if (domain == null || key == null || value == null)
{
return;
}
}
fail("invalid object name: " + domain + ":" + key + "=" + value);
}
}
public static class DomainHashtableExtraTEST extends TestCase
{
public DomainHashtableExtraTEST(String s)
{
super(s);
}
public void testNullHashtable()
{
doCheck(GOOD_DOMAIN, null, "<null>");
}
public void testEmptyHashtable()
{
doCheck(GOOD_DOMAIN, new Hashtable(), "<empty_hashtable>");
}
public void testNonStringKey()
{
Hashtable h = new Hashtable();
h.put(new Object(), GOOD_VALUE);
doCheck(GOOD_DOMAIN, h, "<non_string_key>=" + GOOD_VALUE);
}
public void testNonStringValue()
{
Hashtable h = new Hashtable();
h.put(GOOD_KEY, new Object());
doCheck(GOOD_DOMAIN, h, GOOD_KEY + "=<non_string_value>");
}
private void doCheck(String domain, Hashtable table, String failureHint)
{
try
{
ObjectName name = new ObjectName(domain, table);
}
catch (MalformedObjectNameException e)
{
if (domain != null && table != null)
{
return;
}
}
catch (NullPointerException e)
{
if (domain == null || table == null)
{
return;
}
}
fail("invalid object name: " + domain + ":" + failureHint);
}
}
}