package com.limegroup.gnutella.licenses; import java.io.*; import java.util.*; import junit.framework.Test; import com.limegroup.gnutella.*; import com.limegroup.gnutella.util.*; import com.limegroup.gnutella.bootstrap.*; import org.apache.commons.httpclient.*; public final class WeedLicenseTest extends BaseTestCase { public WeedLicenseTest(String name) { super(name); } public static Test suite() { return buildTestSuite(WeedLicenseTest.class); } /** * Runs this test individually. */ public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public void testBasicParsingXMLWorks() throws Exception { License l = new StubWeedLicense("", "", xml(true, "An Artist", "A Title", "The Price")); Callback c = new Callback(); assertFalse(c.completed); assertFalse(l.isVerified()); assertFalse(l.isVerifying()); l.verify(c); assertTrue(l.isVerified()); assertTrue(l.isValid(null)); assertTrue(c.completed); assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx", l.getLicenseDeed(null).toExternalForm()); String desc = "Artist: An Artist\nTitle: A Title\nPrice: The Price"; assertEquals(desc, l.getLicenseDescription(null)); } public void testCopy() throws Exception { License l = new StubWeedLicense("1", "2", "text"); assertEquals(null, l.getLicense()); assertEquals("http://www.weedshare.com/license/verify_usage_rights.aspx?versionid=2&contentid=1", l.getLicenseURI().toString()); License l2 = l.copy("text3", new URI("http://uri.com".toCharArray())); assertEquals(null, l2.getLicense()); assertEquals("http://uri.com", l2.getLicenseURI().toString()); } public void testSerializeAndDeserialize() throws Exception { License l = new StubWeedLicense("3", "4", "page"); assertEquals(null, l.getLicense()); assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx", l.getLicenseDeed(null).toString()); assertEquals("http://www.weedshare.com/license/verify_usage_rights.aspx?versionid=4&contentid=3", l.getLicenseURI().toString()); assertEquals("Details unknown.", l.getLicenseDescription(null)); assertFalse(l.isVerified()); assertFalse(l.isValid(null)); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout); out.writeObject(l); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(bin); l = (License)in.readObject(); assertEquals(null, l.getLicense()); // CHANGE -- not serialized (but unused anyway) assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx", l.getLicenseDeed(null).toString()); assertEquals(null, l.getLicenseURI()); // CHANGE -- not serialized assertEquals("Details unknown.", l.getLicenseDescription(null)); assertTrue(l.isVerified()); // CHANGE -- becomes verified assertFalse(l.isValid(null)); // Now try with a full out parsed License. l = new StubWeedLicense("3", "4", xml(true, "Sammy B", "Blues In G", "$4.20")); l.verify(null); assertEquals(null, l.getLicense()); assertTrue(l.isVerified()); assertTrue(l.isValid(null)); assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx", l.getLicenseDeed(null).toString()); assertEquals("Artist: Sammy B\nTitle: Blues In G\nPrice: $4.20", l.getLicenseDescription(null)); bout = new ByteArrayOutputStream(); out = new ObjectOutputStream(bout); out.writeObject(l); bin = new ByteArrayInputStream(bout.toByteArray()); in = new ObjectInputStream(bin); l = (License)in.readObject(); assertEquals(null, l.getLicense()); // CHANGE -- not serialized (but unused) assertTrue(l.isVerified()); assertTrue(l.isValid(null)); assertEquals("http://weedshare.com/company/policies/summary_usage_rights.aspx", l.getLicenseDeed(null).toString()); assertEquals("Artist: Sammy B\nTitle: Blues In G\nPrice: $4.20", l.getLicenseDescription(null)); } private String xml(boolean valid, String artist, String title, String price) { return "<WeedVerifyData>" + "<Status>" + (valid ? "Verified" : "Unverified") + "</Status>" + "<Artist>" + artist + "</Artist>" + "<Title>" + title + "</Title>" + "<Price>" + price + "</Price>" + "</WeedVerifyData>"; } public void testAdvancedXMLParsing() throws Exception { License l = new StubWeedLicense( "<WeedVerifyData>" + "<Status>Verified</Status>" + "<Artist>Sam</Artist>" + "<Title>Codes</Title>" + "<Price>Free</Price>" + "<Other>As In Beer</Other>" + "</WeedVerifyData>"); l.verify(null); assertTrue(l.isVerified()); assertTrue(l.isValid(null)); assertEquals("Artist: Sam\nTitle: Codes\nPrice: Free", l.getLicenseDescription(null)); l = new StubWeedLicense("<WeedVerifyData/>"); l.verify(null); assertTrue(l.isVerified()); assertFalse(l.isValid(null)); l = new StubWeedLicense( "<NotWeedData>" + "<Status>Verified</Status>" + "<Artist>Sam</Artist>" + "<Title>Codes</Title>" + "<Price>Free</Price>" + "<Other>As In Beer</Other>" + "</NotWeedData>"); l.verify(null); assertTrue(l.isVerified()); assertFalse(l.isValid(null)); l = new StubWeedLicense( "<WeedVerifyData>" + "<Artist>Sam</Artist>" + "<Title>Codes</Title>" + "<Price>Free</Price>" + "<Other>As In Beer</Other>" + "</WeedVerifyData>"); l.verify(null); assertTrue(l.isVerified()); assertFalse(l.isValid(null)); // no Status element assertEquals("Artist: Sam\nTitle: Codes\nPrice: Free", l.getLicenseDescription(null)); l = new StubWeedLicense( "<WeedVerifyData>" + "<Status>Mr.</Status>" + "<Artist>Sam</Artist>" + "<Title>Codes</Title>" + "<Price>Free</Price>" + "</WeedVerifyData>"); l.verify(null); assertTrue(l.isVerified()); assertFalse(l.isValid(null)); // status isn't verified assertEquals("Artist: Sam\nTitle: Codes\nPrice: Free", l.getLicenseDescription(null)); } public void testHTTPRetrieval() throws Exception { TestBootstrapServer server = new TestBootstrapServer(20181); try { server.setResponseData(xml(true, "A", "B", "Free")); setLookupPage("http://127.0.0.1:20181/"); License l = LicenseFactory.create("http://www.shmedlic.com/license/3play.aspx cid: 34 vid: 78"); l.verify(null); Thread.sleep(1000); assertTrue(l.isVerified()); assertTrue(l.isValid(null)); String desc = "Artist: A\nTitle: B\nPrice: Free"; assertEquals(desc, l.getLicenseDescription(null)); assertEquals(1, server.getConnectionAttempts()); assertEquals(1, server.getRequestAttempts()); assertEquals("GET /?versionid=78&contentid=34&data=1 HTTP/1.1", server.getRequest()); } finally { server.shutdown(); } } private void setLookupPage(String page) throws Exception { PrivilegedAccessor.setValue(WeedLicense.class, "URI", "http://127.0.0.1:20181/"); } }