int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult rv; if (argc < 2) { printf("usage: %s <url> <file-to-upload>\n", argv[0]); return -1; } char* uriSpec = argv[1]; char* fileName = argv[2]; #if defined(PR_LOGGING) gTestLog = PR_NewLogModule("Test"); #endif { nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull); nsCOMPtr<nsIIOService> ioService(do_GetService(kIOServiceCID, &rv)); // first thing to do is create ourselves a stream that // is to be uploaded. nsCOMPtr<nsIInputStream> uploadStream; rv = NS_NewPostDataStream(getter_AddRefs(uploadStream), PR_TRUE, nsDependentCString(fileName), // XXX UTF-8 0, ioService); if (NS_FAILED(rv)) return rv; // create our url. nsCOMPtr<nsIURI> uri; rv = NS_NewURI(getter_AddRefs(uri), uriSpec); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIChannel> channel; rv = ioService->NewChannelFromURI(uri, getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; // QI and set the upload stream nsCOMPtr<nsIUploadChannel> uploadChannel(do_QueryInterface(channel)); uploadChannel->SetUploadStream(uploadStream, EmptyCString(), -1); // create a dummy listener InputTestConsumer* listener; listener = new InputTestConsumer; if (!listener) { NS_ERROR("Failed to create a new stream listener!"); return -1; } NS_ADDREF(listener); channel->AsyncOpen(listener, nsnull); PumpEvents(); } // this scopes the nsCOMPtrs // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM rv = NS_ShutdownXPCOM(nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed"); return 0; }
int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult ret; nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); nsIInputStream* in = nullptr; nsCOMPtr<nsIIOService> service(do_GetService(kIOServiceCID, &ret)); if (NS_FAILED(ret)) return 1; nsIChannel *channel = nullptr; ret = service->NewChannel(NS_LITERAL_CSTRING(TEST_URL), nullptr, nullptr, &channel); if (NS_FAILED(ret)) return 1; ret = channel->Open(&in); if (NS_FAILED(ret)) return 1; nsIPersistentProperties* props; ret = CallCreateInstance(kPersistentPropertiesCID, &props); if (NS_FAILED(ret) || (!props)) { printf("create nsIPersistentProperties failed\n"); return 1; } ret = props->Load(in); if (NS_FAILED(ret)) { printf("cannot load properties\n"); return 1; } int i = 1; while (1) { char name[16]; name[0] = 0; sprintf(name, "%d", i); nsAutoString v; ret = props->GetStringProperty(nsDependentCString(name), v); if (NS_FAILED(ret) || (!v.Length())) { break; } printf("\"%d\"=\"%s\"\n", i, NS_ConvertUTF16toUTF8(v).get()); i++; } nsCOMPtr<nsISimpleEnumerator> propEnum; ret = props->Enumerate(getter_AddRefs(propEnum)); if (NS_FAILED(ret)) { printf("cannot enumerate properties\n"); return 1; } printf("\nKey\tValue\n"); printf( "---\t-----\n"); bool hasMore; while (NS_SUCCEEDED(propEnum->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> sup; ret = propEnum->GetNext(getter_AddRefs(sup)); nsCOMPtr<nsIPropertyElement> propElem = do_QueryInterface(sup, &ret); if (NS_FAILED(ret)) { printf("failed to get current item\n"); return 1; } nsAutoCString key; nsAutoString value; ret = propElem->GetKey(key); if (NS_FAILED(ret)) { printf("failed to get current element's key\n"); return 1; } ret = propElem->GetValue(value); if (NS_FAILED(ret)) { printf("failed to get current element's value\n"); return 1; } printf("%s\t%s\n", key.get(), NS_ConvertUTF16toUTF8(value).get()); } return 0; }
int main(int32_t argc, char *argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; bool allTestsPassed = true; ScopedXPCOM xpcom; if (NS_FAILED(xpcom.rv)) return -1; { nsresult rv0; nsCOMPtr<nsICookieService> cookieService = do_GetService(kCookieServiceCID, &rv0); if (NS_FAILED(rv0)) return -1; nsCOMPtr<nsIPrefBranch> prefBranch = do_GetService(kPrefServiceCID, &rv0); if (NS_FAILED(rv0)) return -1; InitPrefs(prefBranch); bool rv[20]; nsCString cookie; /* The basic idea behind these tests is the following: * * we set() some cookie, then try to get() it in various ways. we have * several possible tests we perform on the cookie string returned from * get(): * * a) check whether the returned string is null (i.e. we got no cookies * back). this is used e.g. to ensure a given cookie was deleted * correctly, or to ensure a certain cookie wasn't returned to a given * host. * b) check whether the returned string exactly matches a given string. * this is used where we want to make sure our cookie service adheres to * some strict spec (e.g. ordering of multiple cookies), or where we * just know exactly what the returned string should be. * c) check whether the returned string contains/does not contain a given * string. this is used where we don't know/don't care about the * ordering of multiple cookies - we just want to make sure the cookie * string contains them all, in some order. * * the results of each individual testing operation from CheckResult() is * stored in an array of bools, which is then checked against the expected * outcomes (all successes), by PrintResult(). the overall result of all * tests to date is kept in |allTestsPassed|, for convenient display at the * end. * * Interpreting the output: * each setting/getting operation will print output saying exactly what * it's doing and the outcome, respectively. this information is only * useful for debugging purposes; the actual result of the tests is * printed at the end of each block of tests. this will either be "all * tests passed" or "tests X Y Z failed", where X, Y, Z are the indexes * of rv (i.e. zero-based). at the conclusion of all tests, the overall * passed/failed result is printed. * * NOTE: this testsuite is not yet comprehensive or complete, and is * somewhat contrived - still under development, and needs improving! */ // *** basic tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning basic tests...\n"); // test some basic variations of the domain & path SetACookie(cookieService, "http://www.basic.com", nullptr, "test=basic", nullptr); GetACookie(cookieService, "http://www.basic.com", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, "test=basic"); GetACookie(cookieService, "http://www.basic.com/testPath/testfile.txt", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_EQUAL, "test=basic"); GetACookie(cookieService, "http://www.basic.com./", nullptr, getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://www.basic.com.", nullptr, getter_Copies(cookie)); rv[3] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://www.basic.com./testPath/testfile.txt", nullptr, getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://www.basic2.com/", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.basic.com", nullptr, "test=basic; max-age=-1", nullptr); GetACookie(cookieService, "http://www.basic.com/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_BE_NULL); allTestsPassed = PrintResult(rv, 7) && allTestsPassed; // *** domain tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning domain tests...\n"); // test some variations of the domain & path, for different domains of // a domain cookie SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=domain.com", nullptr); GetACookie(cookieService, "http://domain.com", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); GetACookie(cookieService, "http://domain.com.", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://www.domain.com", nullptr, getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[3] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=domain.com; max-age=-1", nullptr); GetACookie(cookieService, "http://domain.com", nullptr, getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=.domain.com", nullptr); GetACookie(cookieService, "http://domain.com", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); GetACookie(cookieService, "http://www.domain.com", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); GetACookie(cookieService, "http://bah.domain.com", nullptr, getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_EQUAL, "test=domain"); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=.domain.com; max-age=-1", nullptr); GetACookie(cookieService, "http://domain.com", nullptr, getter_Copies(cookie)); rv[8] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=.foo.domain.com", nullptr); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[9] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=moose.com", nullptr); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[10] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=domain.com.", nullptr); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[11] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=..domain.com", nullptr); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[12] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://www.domain.com", nullptr, "test=domain; domain=..domain.com.", nullptr); GetACookie(cookieService, "http://foo.domain.com", nullptr, getter_Copies(cookie)); rv[13] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=taco; path=\"/bogus\"", nullptr); GetACookie(cookieService, "http://path.net/path/file", nullptr, getter_Copies(cookie)); rv[14] = CheckResult(cookie.get(), MUST_EQUAL, "test=taco"); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=taco; max-age=-1", nullptr); GetACookie(cookieService, "http://path.net/path/file", nullptr, getter_Copies(cookie)); rv[15] = CheckResult(cookie.get(), MUST_BE_NULL); allTestsPassed = PrintResult(rv, 16) && allTestsPassed; // *** path tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning path tests...\n"); // test some variations of the domain & path, for different paths of // a path cookie SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/path", nullptr); GetACookie(cookieService, "http://path.net/path", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); GetACookie(cookieService, "http://path.net/path/", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); GetACookie(cookieService, "http://path.net/path/hithere.foo", nullptr, getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); GetACookie(cookieService, "http://path.net/path?hithere/foo", nullptr, getter_Copies(cookie)); rv[3] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); GetACookie(cookieService, "http://path.net/path2", nullptr, getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://path.net/path2/", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/path; max-age=-1", nullptr); GetACookie(cookieService, "http://path.net/path/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/path/", nullptr); GetACookie(cookieService, "http://path.net/path", nullptr, getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); GetACookie(cookieService, "http://path.net/path/", nullptr, getter_Copies(cookie)); rv[8] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/path/; max-age=-1", nullptr); GetACookie(cookieService, "http://path.net/path/", nullptr, getter_Copies(cookie)); rv[9] = CheckResult(cookie.get(), MUST_BE_NULL); // note that a site can set a cookie for a path it's not on. // this is an intentional deviation from spec (see comments in // nsCookieService::CheckPath()), so we test this functionality too SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/foo/", nullptr); GetACookie(cookieService, "http://path.net/path", nullptr, getter_Copies(cookie)); rv[10] = CheckResult(cookie.get(), MUST_BE_NULL); GetACookie(cookieService, "http://path.net/foo", nullptr, getter_Copies(cookie)); rv[11] = CheckResult(cookie.get(), MUST_EQUAL, "test=path"); SetACookie(cookieService, "http://path.net/path/file", nullptr, "test=path; path=/foo/; max-age=-1", nullptr); GetACookie(cookieService, "http://path.net/foo/", nullptr, getter_Copies(cookie)); rv[12] = CheckResult(cookie.get(), MUST_BE_NULL); // bug 373228: make sure cookies with paths longer than 1024 bytes, // and cookies with paths or names containing tabs, are rejected. // the following cookie has a path > 1024 bytes explicitly specified in the cookie SetACookie(cookieService, "http://path.net/", nullptr, "test=path; path=/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/", nullptr); GetACookie(cookieService, "http://path.net/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", nullptr, getter_Copies(cookie)); rv[13] = CheckResult(cookie.get(), MUST_BE_NULL); // the following cookie has a path > 1024 bytes implicitly specified by the uri path SetACookie(cookieService, "http://path.net/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/", nullptr, "test=path", nullptr); GetACookie(cookieService, "http://path.net/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/", nullptr, getter_Copies(cookie)); rv[14] = CheckResult(cookie.get(), MUST_BE_NULL); // the following cookie includes a tab in the path SetACookie(cookieService, "http://path.net/", nullptr, "test=path; path=/foo\tbar/", nullptr); GetACookie(cookieService, "http://path.net/foo\tbar/", nullptr, getter_Copies(cookie)); rv[15] = CheckResult(cookie.get(), MUST_BE_NULL); // the following cookie includes a tab in the name SetACookie(cookieService, "http://path.net/", nullptr, "test\ttabs=tab", nullptr); GetACookie(cookieService, "http://path.net/", nullptr, getter_Copies(cookie)); rv[16] = CheckResult(cookie.get(), MUST_BE_NULL); // the following cookie includes a tab in the value - allowed SetACookie(cookieService, "http://path.net/", nullptr, "test=tab\ttest", nullptr); GetACookie(cookieService, "http://path.net/", nullptr, getter_Copies(cookie)); rv[17] = CheckResult(cookie.get(), MUST_EQUAL, "test=tab\ttest"); SetACookie(cookieService, "http://path.net/", nullptr, "test=tab\ttest; max-age=-1", nullptr); GetACookie(cookieService, "http://path.net/", nullptr, getter_Copies(cookie)); rv[18] = CheckResult(cookie.get(), MUST_BE_NULL); allTestsPassed = PrintResult(rv, 19) && allTestsPassed; // *** expiry & deletion tests // XXX add server time str parsing tests here sBuffer = PR_sprintf_append(sBuffer, "*** Beginning expiry & deletion tests...\n"); // test some variations of the expiry time, // and test deletion of previously set cookies SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=-1", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=0", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; expires=bad", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_EQUAL, "test=expiry"); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; expires=Thu, 10 Apr 1980 16:33:12 GMT", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[3] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; expires=\"Thu, 10 Apr 1980 16:33:12 GMT", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; expires=\"Thu, 10 Apr 1980 16:33:12 GMT\"", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=60", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_EQUAL, "test=expiry"); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=-20", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=60", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[8] = CheckResult(cookie.get(), MUST_EQUAL, "test=expiry"); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; expires=Thu, 10 Apr 1980 16:33:12 GMT", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[9] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=expiry; max-age=60", nullptr); SetACookie(cookieService, "http://expireme.org/", nullptr, "newtest=expiry; max-age=60", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[10] = CheckResult(cookie.get(), MUST_CONTAIN, "test=expiry"); rv[11] = CheckResult(cookie.get(), MUST_CONTAIN, "newtest=expiry"); SetACookie(cookieService, "http://expireme.org/", nullptr, "test=differentvalue; max-age=0", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[12] = CheckResult(cookie.get(), MUST_EQUAL, "newtest=expiry"); SetACookie(cookieService, "http://expireme.org/", nullptr, "newtest=evendifferentvalue; max-age=0", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[13] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://foo.expireme.org/", nullptr, "test=expiry; domain=.expireme.org; max-age=60", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[14] = CheckResult(cookie.get(), MUST_EQUAL, "test=expiry"); SetACookie(cookieService, "http://bar.expireme.org/", nullptr, "test=differentvalue; domain=.expireme.org; max-age=0", nullptr); GetACookie(cookieService, "http://expireme.org/", nullptr, getter_Copies(cookie)); rv[15] = CheckResult(cookie.get(), MUST_BE_NULL); allTestsPassed = PrintResult(rv, 16) && allTestsPassed; // *** multiple cookie tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning multiple cookie tests...\n"); // test the setting of multiple cookies, and test the order of precedence // (a later cookie overwriting an earlier one, in the same header string) SetACookie(cookieService, "http://multiple.cookies/", nullptr, "test=multiple; domain=.multiple.cookies \n test=different \n test=same; domain=.multiple.cookies \n newtest=ciao \n newtest=foo; max-age=-6 \n newtest=reincarnated", nullptr); GetACookie(cookieService, "http://multiple.cookies/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "test=multiple"); rv[1] = CheckResult(cookie.get(), MUST_CONTAIN, "test=different"); rv[2] = CheckResult(cookie.get(), MUST_CONTAIN, "test=same"); rv[3] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "newtest=ciao"); rv[4] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "newtest=foo"); rv[5] = CheckResult(cookie.get(), MUST_CONTAIN, "newtest=reincarnated"); SetACookie(cookieService, "http://multiple.cookies/", nullptr, "test=expiry; domain=.multiple.cookies; max-age=0", nullptr); GetACookie(cookieService, "http://multiple.cookies/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "test=same"); SetACookie(cookieService, "http://multiple.cookies/", nullptr, "\n test=different; max-age=0 \n", nullptr); GetACookie(cookieService, "http://multiple.cookies/", nullptr, getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "test=different"); SetACookie(cookieService, "http://multiple.cookies/", nullptr, "newtest=dead; max-age=0", nullptr); GetACookie(cookieService, "http://multiple.cookies/", nullptr, getter_Copies(cookie)); rv[8] = CheckResult(cookie.get(), MUST_BE_NULL); allTestsPassed = PrintResult(rv, 9) && allTestsPassed; // *** parser tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning parser tests...\n"); // test the cookie header parser, under various circumstances. SetACookie(cookieService, "http://parser.test/", nullptr, "test=parser; domain=.parser.test; ;; ;=; ,,, ===,abc,=; abracadabra! max-age=20;=;;", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, "test=parser"); SetACookie(cookieService, "http://parser.test/", nullptr, "test=parser; domain=.parser.test; max-age=0", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_BE_NULL); SetACookie(cookieService, "http://parser.test/", nullptr, "test=\"fubar! = foo;bar\\\";\" parser; domain=.parser.test; max-age=6\nfive; max-age=2.63,", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_CONTAIN, "test=\"fubar! = foo"); rv[3] = CheckResult(cookie.get(), MUST_CONTAIN, "five"); SetACookie(cookieService, "http://parser.test/", nullptr, "test=kill; domain=.parser.test; max-age=0 \n five; max-age=0", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); // test the handling of VALUE-only cookies (see bug 169091), // i.e. "six" should assume an empty NAME, which allows other VALUE-only // cookies to overwrite it SetACookie(cookieService, "http://parser.test/", nullptr, "six", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_EQUAL, "six"); SetACookie(cookieService, "http://parser.test/", nullptr, "seven", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_EQUAL, "seven"); SetACookie(cookieService, "http://parser.test/", nullptr, " =eight", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_EQUAL, "eight"); SetACookie(cookieService, "http://parser.test/", nullptr, "test=six", nullptr); GetACookie(cookieService, "http://parser.test/", nullptr, getter_Copies(cookie)); rv[9] = CheckResult(cookie.get(), MUST_CONTAIN, "test=six"); allTestsPassed = PrintResult(rv, 10) && allTestsPassed; // *** path ordering tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning path ordering tests...\n"); // test that cookies are returned in path order - longest to shortest. // if the header doesn't specify a path, it's taken from the host URI. SetACookie(cookieService, "http://multi.path.tests/", nullptr, "test1=path; path=/one/two/three", nullptr); SetACookie(cookieService, "http://multi.path.tests/", nullptr, "test2=path; path=/one \n test3=path; path=/one/two/three/four \n test4=path; path=/one/two \n test5=path; path=/one/two/", nullptr); SetACookie(cookieService, "http://multi.path.tests/one/two/three/four/five/", nullptr, "test6=path", nullptr); SetACookie(cookieService, "http://multi.path.tests/one/two/three/four/five/six/", nullptr, "test7=path; path=", nullptr); SetACookie(cookieService, "http://multi.path.tests/", nullptr, "test8=path; path=/", nullptr); GetACookie(cookieService, "http://multi.path.tests/one/two/three/four/five/six/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, "test7=path; test6=path; test3=path; test1=path; test5=path; test4=path; test2=path; test8=path"); allTestsPassed = PrintResult(rv, 1) && allTestsPassed; // *** httponly tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning httponly tests...\n"); // Since this cookie is NOT set via http, setting it fails SetACookieNoHttp(cookieService, "http://httponly.test/", "test=httponly; httponly"); GetACookie(cookieService, "http://httponly.test/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_BE_NULL); // Since this cookie is set via http, it can be retrieved SetACookie(cookieService, "http://httponly.test/", nullptr, "test=httponly; httponly", nullptr); GetACookie(cookieService, "http://httponly.test/", nullptr, getter_Copies(cookie)); rv[1] = CheckResult(cookie.get(), MUST_EQUAL, "test=httponly"); // ... but not by web content GetACookieNoHttp(cookieService, "http://httponly.test/", getter_Copies(cookie)); rv[2] = CheckResult(cookie.get(), MUST_BE_NULL); // Non-Http cookies should not replace HttpOnly cookies SetACookie(cookieService, "http://httponly.test/", nullptr, "test=httponly; httponly", nullptr); SetACookieNoHttp(cookieService, "http://httponly.test/", "test=not-httponly"); GetACookie(cookieService, "http://httponly.test/", nullptr, getter_Copies(cookie)); rv[3] = CheckResult(cookie.get(), MUST_EQUAL, "test=httponly"); // ... and, if an HttpOnly cookie already exists, should not be set at all GetACookieNoHttp(cookieService, "http://httponly.test/", getter_Copies(cookie)); rv[4] = CheckResult(cookie.get(), MUST_BE_NULL); // Non-Http cookies should not delete HttpOnly cookies SetACookie(cookieService, "http://httponly.test/", nullptr, "test=httponly; httponly", nullptr); SetACookieNoHttp(cookieService, "http://httponly.test/", "test=httponly; max-age=-1"); GetACookie(cookieService, "http://httponly.test/", nullptr, getter_Copies(cookie)); rv[5] = CheckResult(cookie.get(), MUST_EQUAL, "test=httponly"); // ... but HttpOnly cookies should SetACookie(cookieService, "http://httponly.test/", nullptr, "test=httponly; httponly; max-age=-1", nullptr); GetACookie(cookieService, "http://httponly.test/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_BE_NULL); // Non-Httponly cookies can replace HttpOnly cookies when set over http SetACookie(cookieService, "http://httponly.test/", nullptr, "test=httponly; httponly", nullptr); SetACookie(cookieService, "http://httponly.test/", nullptr, "test=not-httponly", nullptr); GetACookieNoHttp(cookieService, "http://httponly.test/", getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_EQUAL, "test=not-httponly"); // scripts should not be able to set httponly cookies by replacing an existing non-httponly cookie SetACookie(cookieService, "http://httponly.test/", nullptr, "test=not-httponly", nullptr); SetACookieNoHttp(cookieService, "http://httponly.test/", "test=httponly; httponly"); GetACookieNoHttp(cookieService, "http://httponly.test/", getter_Copies(cookie)); rv[8] = CheckResult(cookie.get(), MUST_EQUAL, "test=not-httponly"); allTestsPassed = PrintResult(rv, 9) && allTestsPassed; // *** nsICookieManager{2} interface tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning nsICookieManager{2} interface tests...\n"); nsCOMPtr<nsICookieManager> cookieMgr = do_GetService(NS_COOKIEMANAGER_CONTRACTID, &rv0); if (NS_FAILED(rv0)) return -1; nsCOMPtr<nsICookieManager2> cookieMgr2 = do_QueryInterface(cookieMgr); if (!cookieMgr2) return -1; // first, ensure a clean slate rv[0] = NS_SUCCEEDED(cookieMgr->RemoveAll()); // add some cookies rv[1] = NS_SUCCEEDED(cookieMgr2->Add(NS_LITERAL_CSTRING("cookiemgr.test"), // domain NS_LITERAL_CSTRING("/foo"), // path NS_LITERAL_CSTRING("test1"), // name NS_LITERAL_CSTRING("yes"), // value false, // is secure false, // is httponly true, // is session INT64_MAX)); // expiry time rv[2] = NS_SUCCEEDED(cookieMgr2->Add(NS_LITERAL_CSTRING("cookiemgr.test"), // domain NS_LITERAL_CSTRING("/foo"), // path NS_LITERAL_CSTRING("test2"), // name NS_LITERAL_CSTRING("yes"), // value false, // is secure true, // is httponly true, // is session PR_Now() / PR_USEC_PER_SEC + 2)); // expiry time rv[3] = NS_SUCCEEDED(cookieMgr2->Add(NS_LITERAL_CSTRING("new.domain"), // domain NS_LITERAL_CSTRING("/rabbit"), // path NS_LITERAL_CSTRING("test3"), // name NS_LITERAL_CSTRING("yes"), // value false, // is secure false, // is httponly true, // is session INT64_MAX)); // expiry time // confirm using enumerator nsCOMPtr<nsISimpleEnumerator> enumerator; rv[4] = NS_SUCCEEDED(cookieMgr->GetEnumerator(getter_AddRefs(enumerator))); int32_t i = 0; bool more; nsCOMPtr<nsICookie2> expiredCookie, newDomainCookie; while (NS_SUCCEEDED(enumerator->HasMoreElements(&more)) && more) { nsCOMPtr<nsISupports> cookie; if (NS_FAILED(enumerator->GetNext(getter_AddRefs(cookie)))) break; ++i; // keep tabs on the second and third cookies, so we can check them later nsCOMPtr<nsICookie2> cookie2(do_QueryInterface(cookie)); if (!cookie2) break; nsAutoCString name; cookie2->GetName(name); if (name.EqualsLiteral("test2")) expiredCookie = cookie2; else if (name.EqualsLiteral("test3")) newDomainCookie = cookie2; } rv[5] = i == 3; // check the httpOnly attribute of the second cookie is honored GetACookie(cookieService, "http://cookiemgr.test/foo/", nullptr, getter_Copies(cookie)); rv[6] = CheckResult(cookie.get(), MUST_CONTAIN, "test2=yes"); GetACookieNoHttp(cookieService, "http://cookiemgr.test/foo/", getter_Copies(cookie)); rv[7] = CheckResult(cookie.get(), MUST_NOT_CONTAIN, "test2=yes"); // check CountCookiesFromHost() uint32_t hostCookies = 0; rv[8] = NS_SUCCEEDED(cookieMgr2->CountCookiesFromHost(NS_LITERAL_CSTRING("cookiemgr.test"), &hostCookies)) && hostCookies == 2; // check CookieExists() using the third cookie bool found; rv[9] = NS_SUCCEEDED(cookieMgr2->CookieExists(newDomainCookie, &found)) && found; // remove the cookie, block it, and ensure it can't be added again rv[10] = NS_SUCCEEDED(cookieMgr->Remove(NS_LITERAL_CSTRING("new.domain"), // domain NS_LITERAL_CSTRING("test3"), // name NS_LITERAL_CSTRING("/rabbit"), // path true)); // is blocked rv[11] = NS_SUCCEEDED(cookieMgr2->CookieExists(newDomainCookie, &found)) && !found; rv[12] = NS_SUCCEEDED(cookieMgr2->Add(NS_LITERAL_CSTRING("new.domain"), // domain NS_LITERAL_CSTRING("/rabbit"), // path NS_LITERAL_CSTRING("test3"), // name NS_LITERAL_CSTRING("yes"), // value false, // is secure false, // is httponly true, // is session INT64_MIN)); // expiry time rv[13] = NS_SUCCEEDED(cookieMgr2->CookieExists(newDomainCookie, &found)) && !found; // sleep four seconds, to make sure the second cookie has expired PR_Sleep(4 * PR_TicksPerSecond()); // check that both CountCookiesFromHost() and CookieExists() count the // expired cookie rv[14] = NS_SUCCEEDED(cookieMgr2->CountCookiesFromHost(NS_LITERAL_CSTRING("cookiemgr.test"), &hostCookies)) && hostCookies == 2; rv[15] = NS_SUCCEEDED(cookieMgr2->CookieExists(expiredCookie, &found)) && found; // double-check RemoveAll() using the enumerator rv[16] = NS_SUCCEEDED(cookieMgr->RemoveAll()); rv[17] = NS_SUCCEEDED(cookieMgr->GetEnumerator(getter_AddRefs(enumerator))) && NS_SUCCEEDED(enumerator->HasMoreElements(&more)) && !more; allTestsPassed = PrintResult(rv, 18) && allTestsPassed; // *** eviction and creation ordering tests sBuffer = PR_sprintf_append(sBuffer, "*** Beginning eviction and creation ordering tests...\n"); // test that cookies are // a) returned by order of creation time (oldest first, newest last) // b) evicted by order of lastAccessed time, if the limit on cookies per host (50) is reached nsAutoCString name; nsAutoCString expected; for (int32_t i = 0; i < 60; ++i) { name = NS_LITERAL_CSTRING("test"); name.AppendInt(i); name += NS_LITERAL_CSTRING("=creation"); SetACookie(cookieService, "http://creation.ordering.tests/", nullptr, name.get(), nullptr); if (i >= 10) { expected += name; if (i < 59) expected += NS_LITERAL_CSTRING("; "); } } GetACookie(cookieService, "http://creation.ordering.tests/", nullptr, getter_Copies(cookie)); rv[0] = CheckResult(cookie.get(), MUST_EQUAL, expected.get()); allTestsPassed = PrintResult(rv, 1) && allTestsPassed; // XXX the following are placeholders: add these tests please! // *** "noncompliant cookie" tests // *** IP address tests // *** speed tests sBuffer = PR_sprintf_append(sBuffer, "\n*** Result: %s!\n\n", allTestsPassed ? "all tests passed" : "TEST(S) FAILED"); } if (!allTestsPassed) { // print the entire log printf("%s", sBuffer); return 1; } PR_smprintf_free(sBuffer); sBuffer = nullptr; return 0; }
int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult rv; if (argc < 2) { printf("usage: %s <file-to-read>\n", argv[0]); return -1; } char* fileName = argv[1]; { nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull); nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); if (registrar) registrar->AutoRegister(nsnull); #if defined(PR_LOGGING) gTestLog = PR_NewLogModule("Test"); #endif nsCOMPtr<nsILocalFile> srcFile; rv = NS_NewNativeLocalFile(nsDependentCString(fileName), PR_FALSE, getter_AddRefs(srcFile)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIFile> destFile; rv = srcFile->Clone(getter_AddRefs(destFile)); if (NS_FAILED(rv)) return rv; nsCAutoString leafName; rv = destFile->GetNativeLeafName(leafName); if (NS_FAILED(rv)) return rv; nsCAutoString newName(leafName); newName.Append(NS_LITERAL_CSTRING(".1")); rv = destFile->SetNativeLeafName(newName); if (NS_FAILED(rv)) return rv; rv = RunTest(srcFile, destFile); NS_ASSERTION(NS_SUCCEEDED(rv), "RunTest failed"); newName = leafName; newName.Append(NS_LITERAL_CSTRING(".2")); rv = destFile->SetNativeLeafName(newName); if (NS_FAILED(rv)) return rv; rv = RunBlockingTest(srcFile, destFile); NS_ASSERTION(NS_SUCCEEDED(rv), "RunBlockingTest failed"); // give background threads a chance to finish whatever work they may // be doing. PR_Sleep(PR_SecondsToInterval(1)); } // this scopes the nsCOMPtrs // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM rv = NS_ShutdownXPCOM(nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed"); return NS_OK; }
int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult rv; if (argc < 4) { printf("usage: TestSocketTransport <host> <port> <path>\n"); return -1; } { nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); if (registrar) registrar->AutoRegister(nullptr); #if defined(PR_LOGGING) gTestLog = PR_NewLogModule("Test"); #endif // Make sure the DNS service is initialized on the main thread nsCOMPtr<nsIDNSService> dns = do_GetService(NS_DNSSERVICE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsPISocketTransportService> sts = do_GetService(kSocketTransportServiceCID, &rv); if (NS_FAILED(rv)) return rv; LOG(("phase 1 tests...\n")); LOG(("flags = { OPEN_UNBUFFERED, OPEN_UNBUFFERED }\n")); rv = RunCloseTest(sts, argv[1], atoi(argv[2]), nsITransport::OPEN_UNBUFFERED, nsITransport::OPEN_UNBUFFERED); NS_ASSERTION(NS_SUCCEEDED(rv), "RunCloseTest failed"); LOG(("flags = { OPEN_BUFFERED, OPEN_UNBUFFERED }\n")); rv = RunCloseTest(sts, argv[1], atoi(argv[2]), 0 /* nsITransport::OPEN_BUFFERED */, nsITransport::OPEN_UNBUFFERED); NS_ASSERTION(NS_SUCCEEDED(rv), "RunCloseTest failed"); LOG(("flags = { OPEN_UNBUFFERED, OPEN_BUFFERED }\n")); rv = RunCloseTest(sts, argv[1], atoi(argv[2]), nsITransport::OPEN_UNBUFFERED, 0 /*nsITransport::OPEN_BUFFERED */); NS_ASSERTION(NS_SUCCEEDED(rv), "RunCloseTest failed"); LOG(("flags = { OPEN_BUFFERED, OPEN_BUFFERED }\n")); rv = RunCloseTest(sts, argv[1], atoi(argv[2]), 0 /*nsITransport::OPEN_BUFFERED */, 0 /*nsITransport::OPEN_BUFFERED */); NS_ASSERTION(NS_SUCCEEDED(rv), "RunCloseTest failed"); LOG(("calling Shutdown on socket transport service:\n")); sts->Shutdown(); LOG(("calling Init on socket transport service:\n")); sts->Init(); LOG(("phase 2 tests...\n")); LOG(("flags = { OPEN_UNBUFFERED, OPEN_UNBUFFERED }\n")); rv = RunTest(sts, argv[1], atoi(argv[2]), argv[3], nsITransport::OPEN_UNBUFFERED, nsITransport::OPEN_UNBUFFERED); NS_ASSERTION(NS_SUCCEEDED(rv), "RunTest failed"); LOG(("flags = { OPEN_BUFFERED, OPEN_UNBUFFERED }\n")); rv = RunTest(sts, argv[1], atoi(argv[2]), argv[3], 0 /* nsITransport::OPEN_BUFFERED */, nsITransport::OPEN_UNBUFFERED); NS_ASSERTION(NS_SUCCEEDED(rv), "RunTest failed"); LOG(("flags = { OPEN_UNBUFFERED, OPEN_BUFFERED }\n")); rv = RunTest(sts, argv[1], atoi(argv[2]), argv[3], nsITransport::OPEN_UNBUFFERED, 0 /*nsITransport::OPEN_BUFFERED */); NS_ASSERTION(NS_SUCCEEDED(rv), "RunTest failed"); LOG(("flags = { OPEN_BUFFERED, OPEN_BUFFERED }\n")); rv = RunTest(sts, argv[1], atoi(argv[2]), argv[3], 0 /*nsITransport::OPEN_BUFFERED */, 0 /*nsITransport::OPEN_BUFFERED */); NS_ASSERTION(NS_SUCCEEDED(rv), "RunTest failed"); LOG(("waiting 1 second before calling Shutdown...\n")); PR_Sleep(PR_SecondsToInterval(1)); LOG(("calling Shutdown on socket transport service:\n")); sts->Shutdown(); // give background threads a chance to finish whatever work they may // be doing. LOG(("waiting 1 second before exiting...\n")); PR_Sleep(PR_SecondsToInterval(1)); } // this scopes the nsCOMPtrs // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM rv = NS_ShutdownXPCOM(nullptr); NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed"); return 0; }
int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult ret; nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); nsIInputStream* in = nullptr; nsCOMPtr<nsIScriptSecurityManager> secman = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &ret); if (NS_FAILED(ret)) return 1; nsCOMPtr<nsIPrincipal> systemPrincipal; ret = secman->GetSystemPrincipal(getter_AddRefs(systemPrincipal)); if (NS_FAILED(ret)) return 1; nsCOMPtr<nsIURI> uri; ret = NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING(TEST_URL)); if (NS_FAILED(ret)) return 1; nsIChannel *channel = nullptr; ret = NS_NewChannel(&channel, uri, systemPrincipal, nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL, nsIContentPolicy::TYPE_OTHER); if (NS_FAILED(ret)) return 1; ret = channel->Open2(&in); if (NS_FAILED(ret)) return 1; nsIPersistentProperties* props; ret = CallCreateInstance(kPersistentPropertiesCID, &props); if (NS_FAILED(ret) || (!props)) { printf("create nsIPersistentProperties failed\n"); return 1; } ret = props->Load(in); if (NS_FAILED(ret)) { printf("cannot load properties\n"); return 1; } int i = 1; while (1) { char name[16]; name[0] = 0; SprintfLiteral(name, "%d", i); nsAutoString v; ret = props->GetStringProperty(nsDependentCString(name), v); if (NS_FAILED(ret) || (!v.Length())) { break; } printf("\"%d\"=\"%s\"\n", i, NS_ConvertUTF16toUTF8(v).get()); i++; } nsCOMPtr<nsISimpleEnumerator> propEnum; ret = props->Enumerate(getter_AddRefs(propEnum)); if (NS_FAILED(ret)) { printf("cannot enumerate properties\n"); return 1; } printf("\nKey\tValue\n"); printf( "---\t-----\n"); bool hasMore; while (NS_SUCCEEDED(propEnum->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> sup; ret = propEnum->GetNext(getter_AddRefs(sup)); nsCOMPtr<nsIPropertyElement> propElem = do_QueryInterface(sup, &ret); if (NS_FAILED(ret)) { printf("failed to get current item\n"); return 1; } nsAutoCString key; nsAutoString value; ret = propElem->GetKey(key); if (NS_FAILED(ret)) { printf("failed to get current element's key\n"); return 1; } ret = propElem->GetValue(value); if (NS_FAILED(ret)) { printf("failed to get current element's value\n"); return 1; } printf("%s\t%s\n", key.get(), NS_ConvertUTF16toUTF8(value).get()); } return 0; }
int main(int argc, char **argv) { if (test_common_init(&argc, &argv) != 0) return -1; int rv = -1; if (argc < 2) { printusage(); return NS_OK; } { nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); // end of all messages from register components... printf("------------------\n\n"); PRInt32 urlFactory = URL_FACTORY_DEFAULT; bool bMakeAbs= false; char* relativePath = 0; char* url = 0; for (int i=1; i<argc; i++) { if (PL_strcasecmp(argv[i], "-std") == 0) { urlFactory = URL_FACTORY_STDURL; if (i+1 >= argc) { printusage(); return NS_OK; } } else if (PL_strcasecmp(argv[i], "-abs") == 0) { if (!gFileIO) { relativePath = argv[i+1]; i++; } bMakeAbs = true; } else if (PL_strcasecmp(argv[i], "-file") == 0) { if (i+1 >= argc) { printusage(); return NS_OK; } gFileIO = argv[i+1]; i++; } else { url = argv[i]; } } PRTime startTime = PR_Now(); if (bMakeAbs) { rv = (url && relativePath) ? doMakeAbsTest(url, relativePath) : doMakeAbsTest(); } else { rv = gFileIO ? testURL(0, urlFactory) : testURL(url, urlFactory); } if (gFileIO) { PRTime endTime = PR_Now(); printf("Elapsed time: %d micros.\n", (PRInt32) (endTime - startTime)); } } // this scopes the nsCOMPtrs // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM rv = NS_ShutdownXPCOM(nullptr); return rv; }
int main(int argc, char* argv[]) { if (test_common_init(&argc, &argv) != 0) return -1; int returnCode = 0; nsresult rv = NS_OK; PRFileDesc *serverFD = nullptr; do { // act both as a scope for nsCOMPtrs to be released before XPCOM // shutdown, as well as a easy way to abort the test PRStatus status = PR_SUCCESS; nsCOMPtr<nsIServiceManager> servMan; NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan); UDP_ASSERT(registrar, "Null nsIComponentRegistrar"); if (registrar) registrar->AutoRegister(nullptr); // listen for a incoming UDP connection on localhost serverFD = PR_OpenUDPSocket(PR_AF_INET); UDP_ASSERT(serverFD, "Cannot open UDP socket for listening"); PRSocketOptionData socketOptions; socketOptions.option = PR_SockOpt_Nonblocking; socketOptions.value.non_blocking = false; status = PR_SetSocketOption(serverFD, &socketOptions); UDP_ASSERT_PRSTATUS("Failed to set server socket as blocking"); PRNetAddr addr; status = PR_InitializeNetAddr(PR_IpAddrLoopback, UDP_PORT, &addr); UDP_ASSERT_PRSTATUS("Failed to initialize loopback address"); status = PR_Bind(serverFD, &addr); UDP_ASSERT_PRSTATUS("Failed to bind server socket"); // dummy IOService to get around bug 379890 nsCOMPtr<nsISupports> ios = do_GetService("@mozilla.org/network/io-service;1"); // and have a matching UDP connection for the client nsCOMPtr<nsISocketTransportService> sts = do_GetService("@mozilla.org/network/socket-transport-service;1", &rv); UDP_ASSERT_NSRESULT("Cannot get socket transport service"); nsCOMPtr<nsISocketTransport> transport; const char *protocol = "udp"; rv = sts->CreateTransport(&protocol, 1, NS_LITERAL_CSTRING("localhost"), UDP_PORT, nullptr, getter_AddRefs(transport)); UDP_ASSERT_NSRESULT("Cannot create transport"); uint32_t count, read; const uint32_t data = 0xFF0056A9; // write to the output stream nsCOMPtr<nsIOutputStream> outstream; rv = transport->OpenOutputStream(nsITransport::OPEN_BLOCKING, 0, 0, getter_AddRefs(outstream)); UDP_ASSERT_NSRESULT("Cannot open output stream"); rv = outstream->Write((const char*)&data, sizeof(uint32_t), &count); UDP_ASSERT_NSRESULT("Cannot write to output stream"); UDP_ASSERT(count == sizeof(uint32_t), "Did not write enough bytes to output stream"); // read from NSPR to check it's the same count = PR_RecvFrom(serverFD, &read, sizeof(uint32_t), 0, &addr, 1); UDP_ASSERT(count == sizeof(uint32_t), "Did not read enough bytes from NSPR"); status = (read == data ? PR_SUCCESS : PR_FAILURE); UDP_ASSERT_PRSTATUS("Did not read expected data from NSPR"); // write to NSPR count = PR_SendTo(serverFD, &data, sizeof(uint32_t), 0, &addr, 1); status = (count == sizeof(uint32_t) ? PR_SUCCESS : PR_FAILURE); UDP_ASSERT_PRSTATUS("Did not write enough bytes to NSPR"); // read from stream nsCOMPtr<nsIInputStream> instream; rv = transport->OpenInputStream(nsITransport::OPEN_BLOCKING, 0, 0, getter_AddRefs(instream)); UDP_ASSERT_NSRESULT("Cannot open input stream"); rv = instream->Read((char*)&read, sizeof(uint32_t), &count); UDP_ASSERT_NSRESULT("Cannot read from input stream"); UDP_ASSERT(count == sizeof(uint32_t), "Did not read enough bytes from input stream"); UDP_ASSERT(read == data, "Did not read expected data from stream"); } while (false); // release all XPCOM things if (serverFD) { PRStatus status = PR_Close(serverFD); if (status != PR_SUCCESS) { PRErrorCode err = PR_GetError(); fprintf(stderr, "FAIL: Cannot close server: (%08x) %s\n", err, PR_ErrorToString(err, PR_LANGUAGE_I_DEFAULT)); } } rv = NS_ShutdownXPCOM(nullptr); NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed"); return returnCode; }