transport: sqlite channel status and load flags
[abstract.git] / transport / test / aaChannelTest.cpp
blob9f6254c12cd473ec613f68e2c811cd6665128683
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=cpp: */
3 /*
4 * Copyright (C) 2010 Sergey Yanovich <ynvich@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
22 #include "aaChannelTest.h"
24 #include "nsIFile.h"
25 #include "nsIThreadManager.h"
26 #include "nsIThread.h"
27 #include "nsServiceManagerUtils.h"
28 #include "nsStringAPI.h"
29 #include "nsCOMPtr.h"
30 #include "nsAutoPtr.h"
31 #include "nsMimeTypes.h"
32 #include "nsILoadGroup.h"
34 #include "aaTransportTestUtils.h"
35 #include "nsTestUtils.h"
36 #include "nsITestRunner.h"
37 #include "aaSqliteChannel.h"
39 static const nsCAutoString kCreateTestTable = NS_LITERAL_CSTRING(
40 "CREATE TABLE test(id INTEGER PRIMARY KEY AUTOINCREMENT, "
41 "tag CHAR(20) UNIQUE)"
43 static const nsCAutoString kInsertTestRow1 = NS_LITERAL_CSTRING(
44 "INSERT INTO test(tag) VALUES('row1')"
48 static const nsCAutoString kTransportContentType =
49 NS_LITERAL_CSTRING("text/dbxml");
50 static const nsCAutoString kTestContentType =
51 NS_LITERAL_CSTRING(TEXT_XML);
53 /********************aaChannelObserver*****************************/
55 class aaChannelObserver : public nsIStreamListener
57 public:
58 aaChannelObserver(nsITestRunner* aRunner)
59 : mState(DEFAULT)
60 , mRunner(aRunner) {}
61 NS_DECL_ISUPPORTS
62 NS_DECL_NSIREQUESTOBSERVER
63 NS_DECL_NSISTREAMLISTENER
65 enum EState {
66 START = 0x00,
67 DATA,
68 STOP,
69 DEFAULT = 0xFF
71 nsresult Wait(EState aEventType = STOP);
72 protected:
73 virtual ~aaChannelObserver() {}
75 nsITestRunner* PickRunner() { return mRunner; }
76 private:
78 EState mState;
79 nsCOMPtr<nsITestRunner> mRunner;
82 NS_IMPL_ISUPPORTS2(aaChannelObserver,
83 nsIRequestObserver,
84 nsIStreamListener)
86 NS_IMETHODIMP
87 aaChannelObserver::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext)
89 NS_TEST_BEGIN(mRunner);
90 NS_TEST_ASSERT_MSG(DEFAULT == mState,
91 "[channel test] onStartRequest is not called first");
92 mState = START;
93 return NS_OK;
96 NS_IMETHODIMP
97 aaChannelObserver::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext,
98 nsresult aStatusCode)
100 NS_TEST_BEGIN(mRunner);
101 NS_TEST_ASSERT_MSG(DATA == mState || START == mState,
102 "[channel test] onStopRequest is not called last");
103 mState = STOP;
104 return NS_OK;
107 NS_IMETHODIMP
108 aaChannelObserver::OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext,
109 nsIInputStream *aInputStream, PRUint32 aOffset, PRUint32 aCount)
111 NS_TEST_BEGIN(mRunner);
112 NS_TEST_ASSERT_MSG(DATA == mState || START == mState,
113 "[channel test] onDataAvailable is not called after onStartRequest");
114 mState = DATA;
115 return NS_OK;
118 nsresult
119 aaChannelObserver::Wait(EState aEventType)
121 nsresult rv = NS_OK;
123 nsCOMPtr<nsIThreadManager> thManager =
124 do_GetService("@mozilla.org/thread-manager;1", &rv);
125 NS_ENSURE_SUCCESS(rv, rv);
127 nsCOMPtr<nsIThread> currThread;
128 rv = thManager->GetCurrentThread(getter_AddRefs(currThread));
129 NS_ENSURE_SUCCESS(rv, rv);
131 while (aEventType != mState)
133 PRBool fProcessed = PR_FALSE;
134 rv = currThread->ProcessNextEvent(PR_TRUE, &fProcessed);
135 NS_ENSURE_SUCCESS(rv, rv);
138 return NS_OK;
141 /********************aaAttributeCheckObserver*****************************/
142 class aaAttributeCheckObserver : public aaChannelObserver
144 public:
145 aaAttributeCheckObserver(nsITestRunner *aRunner, nsISupports *aOwner)
146 : aaChannelObserver(aRunner)
147 , mOwner(aOwner) {}
148 NS_DECL_ISUPPORTS_INHERITED
149 NS_DECL_NSISTREAMLISTENER
150 NS_DECL_NSIREQUESTOBSERVER
151 private:
152 virtual ~aaAttributeCheckObserver() {}
153 nsresult checkAttributes(nsIRequest *aRequest);
155 nsCOMPtr<nsISupports> mOwner;
158 NS_IMPL_ISUPPORTS_INHERITED0(aaAttributeCheckObserver,
159 aaChannelObserver)
161 NS_IMETHODIMP
162 aaAttributeCheckObserver::OnStartRequest(nsIRequest *aRequest,
163 nsISupports *aContext)
165 checkAttributes(aRequest);
166 return aaChannelObserver::OnStartRequest(aRequest, aContext);
169 NS_IMETHODIMP
170 aaAttributeCheckObserver::OnStopRequest(nsIRequest *aRequest,
171 nsISupports *aContext, nsresult aStatusCode)
173 checkAttributes(aRequest);
174 return aaChannelObserver::OnStopRequest(aRequest, aContext, aStatusCode);
177 NS_IMETHODIMP
178 aaAttributeCheckObserver::OnDataAvailable(nsIRequest *aRequest,
179 nsISupports *aContext, nsIInputStream *aInputStream,
180 PRUint32 aOffset, PRUint32 aCount)
182 checkAttributes(aRequest);
183 return aaChannelObserver::OnDataAvailable(aRequest, aContext, aInputStream,
184 aOffset, aCount);
187 nsresult
188 aaAttributeCheckObserver::checkAttributes(nsIRequest *aRequest)
190 NS_TEST_BEGIN(PickRunner());
192 nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
193 NS_TEST_ASSERT_MSG(channel, "[channel test] request is not a channel");
195 if (channel)
197 nsresult rv = NS_OK;
198 nsCOMPtr<nsISupports> channelOwner;
199 rv = channel->GetOwner(getter_AddRefs(channelOwner));
200 NS_TEST_ASSERT_OK(rv);
202 NS_TEST_ASSERT_MSG(mOwner.get() == channelOwner.get(),
203 "[channel test] owner is not strong refferenced");
205 nsCAutoString contentType;
206 rv = channel->GetContentType(contentType);
207 NS_TEST_ASSERT_OK(rv);
209 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
210 "[channel test] content type is not text/dbxml");
213 return NS_OK;
216 /********************aaContentTypeObserver*****************************/
217 class aaContentTypeObserver : public aaChannelObserver
219 public:
220 aaContentTypeObserver(nsITestRunner *aRunner,
221 const nsACString& aNewContentType)
222 : aaChannelObserver(aRunner)
223 , mNewContentType(aNewContentType) {}
224 NS_DECL_ISUPPORTS_INHERITED
225 NS_DECL_NSISTREAMLISTENER
226 NS_DECL_NSIREQUESTOBSERVER
227 private:
228 virtual ~aaContentTypeObserver() {}
229 nsresult checkContentType(nsIRequest *aRequest,
230 const nsACString& aContentType);
232 nsCAutoString mNewContentType;
235 NS_IMPL_ISUPPORTS_INHERITED0(aaContentTypeObserver,
236 aaChannelObserver)
238 NS_IMETHODIMP
239 aaContentTypeObserver::OnStartRequest(nsIRequest *aRequest,
240 nsISupports *aContext)
242 checkContentType(aRequest, kTransportContentType);
243 return aaChannelObserver::OnStartRequest(aRequest, aContext);
246 NS_IMETHODIMP
247 aaContentTypeObserver::OnStopRequest(nsIRequest *aRequest,
248 nsISupports *aContext, nsresult aStatusCode)
250 checkContentType(aRequest, mNewContentType);
251 return aaChannelObserver::OnStopRequest(aRequest, aContext, aStatusCode);
254 NS_IMETHODIMP
255 aaContentTypeObserver::OnDataAvailable(nsIRequest *aRequest,
256 nsISupports *aContext, nsIInputStream *aInputStream,
257 PRUint32 aOffset, PRUint32 aCount)
259 checkContentType(aRequest, mNewContentType);
260 return aaChannelObserver::OnDataAvailable(aRequest, aContext, aInputStream,
261 aOffset, aCount);
264 nsresult
265 aaContentTypeObserver::checkContentType(nsIRequest *aRequest,
266 const nsACString& aContentType)
268 NS_TEST_BEGIN(PickRunner());
270 nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
271 NS_TEST_ASSERT_MSG(channel, "[channel test] request is not a channel");
273 if (channel)
275 nsresult rv = NS_OK;
276 nsCAutoString contentType;
277 rv = channel->GetContentType(contentType);
278 NS_TEST_ASSERT_OK(rv);
280 NS_TEST_ASSERT_MSG(contentType.Equals(aContentType),
281 "[channel test] content type is not right");
284 return NS_OK;
287 /********************aaTestLoadGroup***************************/
288 class aaTestLoadGroup : public nsILoadGroup
290 public:
291 aaTestLoadGroup() {}
292 NS_DECL_ISUPPORTS
293 NS_DECL_NSILOADGROUP
294 NS_DECL_NSIREQUEST
296 nsIRequest* PickRequest() { return mRequest.get(); }
297 private:
298 ~aaTestLoadGroup() {}
300 nsCOMPtr<nsIRequest> mRequest;
303 NS_IMPL_ISUPPORTS2(aaTestLoadGroup,
304 nsILoadGroup, nsIRequest)
306 /* attribute nsIRequestObserver groupObserver; */
307 NS_IMETHODIMP
308 aaTestLoadGroup::GetGroupObserver(nsIRequestObserver **aGroupObserver)
310 return NS_ERROR_NOT_IMPLEMENTED;
312 NS_IMETHODIMP
313 aaTestLoadGroup::SetGroupObserver(nsIRequestObserver *aGroupObserver)
315 return NS_ERROR_NOT_IMPLEMENTED;
318 /* attribute nsIRequest defaultLoadRequest; */
319 NS_IMETHODIMP
320 aaTestLoadGroup::GetDefaultLoadRequest(nsIRequest **aDefaultLoadRequest)
322 return NS_ERROR_NOT_IMPLEMENTED;
324 NS_IMETHODIMP
325 aaTestLoadGroup::SetDefaultLoadRequest(nsIRequest *aDefaultLoadRequest)
327 return NS_ERROR_NOT_IMPLEMENTED;
330 /* void addRequest (in nsIRequest aRequest, in nsISupports aContext); */
331 NS_IMETHODIMP
332 aaTestLoadGroup::AddRequest(nsIRequest *aRequest, nsISupports *aContext)
334 NS_ENSURE_ARG_POINTER(aRequest);
335 mRequest = aRequest;
336 return NS_OK;
339 /* void removeRequest (in nsIRequest aRequest, in nsISupports aContext, in
340 * nsresult aStatus); */
341 NS_IMETHODIMP
342 aaTestLoadGroup::RemoveRequest(nsIRequest *aRequest, nsISupports *aContext,
343 nsresult aStatus)
345 NS_ENSURE_ARG_POINTER(aRequest);
346 NS_ENSURE_TRUE(aRequest == mRequest.get(), NS_ERROR_FAILURE);
347 mRequest = nsnull;
348 return NS_OK;
351 /* readonly attribute nsISimpleEnumerator requests; */
352 NS_IMETHODIMP
353 aaTestLoadGroup::GetRequests(nsISimpleEnumerator **aRequests)
355 return NS_ERROR_NOT_IMPLEMENTED;
358 /* readonly attribute unsigned long activeCount; */
359 NS_IMETHODIMP
360 aaTestLoadGroup::GetActiveCount(PRUint32 *aActiveCount)
362 return NS_ERROR_NOT_IMPLEMENTED;
365 /* attribute nsIInterfaceRequestor notificationCallbacks; */
366 NS_IMETHODIMP
367 aaTestLoadGroup::GetNotificationCallbacks(
368 nsIInterfaceRequestor **aNotificationCallbacks)
370 return NS_ERROR_NOT_IMPLEMENTED;
372 NS_IMETHODIMP
373 aaTestLoadGroup::SetNotificationCallbacks(
374 nsIInterfaceRequestor *aNotificationCallbacks)
376 return NS_ERROR_NOT_IMPLEMENTED;
379 /* readonly attribute AUTF8String name; */
380 NS_IMETHODIMP
381 aaTestLoadGroup::GetName(nsACString & aName)
383 return NS_ERROR_NOT_IMPLEMENTED;
386 /* boolean isPending (); */
387 NS_IMETHODIMP
388 aaTestLoadGroup::IsPending(PRBool *_retval NS_OUTPARAM)
390 return NS_ERROR_NOT_IMPLEMENTED;
393 /* readonly attribute nsresult status; */
394 NS_IMETHODIMP
395 aaTestLoadGroup::GetStatus(nsresult *aStatus)
397 return NS_ERROR_NOT_IMPLEMENTED;
400 /* void cancel (in nsresult aStatus); */
401 NS_IMETHODIMP
402 aaTestLoadGroup::Cancel(nsresult aStatus)
404 return NS_ERROR_NOT_IMPLEMENTED;
407 /* void suspend (); */
408 NS_IMETHODIMP
409 aaTestLoadGroup::Suspend()
411 return NS_ERROR_NOT_IMPLEMENTED;
414 /* void resume (); */
415 NS_IMETHODIMP
416 aaTestLoadGroup::Resume()
418 return NS_ERROR_NOT_IMPLEMENTED;
421 /* attribute nsILoadGroup loadGroup; */
422 NS_IMETHODIMP
423 aaTestLoadGroup::GetLoadGroup(nsILoadGroup * *aLoadGroup)
425 return NS_ERROR_NOT_IMPLEMENTED;
427 NS_IMETHODIMP
428 aaTestLoadGroup::SetLoadGroup(nsILoadGroup * aLoadGroup)
430 return NS_ERROR_NOT_IMPLEMENTED;
433 /* attribute nsLoadFlags loadFlags; */
434 NS_IMETHODIMP
435 aaTestLoadGroup::GetLoadFlags(nsLoadFlags *aLoadFlags)
437 return NS_ERROR_NOT_IMPLEMENTED;
439 NS_IMETHODIMP
440 aaTestLoadGroup::SetLoadFlags(nsLoadFlags aLoadFlags)
442 return NS_ERROR_NOT_IMPLEMENTED;
445 /********************aaChannelTest*****************************/
447 aaChannelTest::aaChannelTest()
451 NS_IMPL_ISUPPORTS1(aaChannelTest, nsITest)
453 NS_IMETHODIMP
454 aaChannelTest::Test(nsITestRunner *aRunner)
456 nsresult rv = NS_OK;
457 NS_TEST_BEGIN(aRunner);
459 nsCOMPtr<nsIFile> file;
460 rv = AA_NewTempFile(getter_AddRefs(file),
461 NS_LITERAL_CSTRING("transport.sqlite"), PR_TRUE);
462 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
464 rv = testChannelAttributes(aRunner, file);
465 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
467 rv = testChannelContentType(aRunner, file);
468 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
470 return NS_OK;
473 nsresult
474 aaChannelTest::testChannelAttributes(nsITestRunner *aRunner, nsIFile *aFile)
476 nsresult rv = NS_OK;
477 NS_ENSURE_ARG_POINTER(aFile);
479 NS_TEST_BEGIN(aRunner);
481 nsCOMPtr<nsIURI> dbURI;
482 rv = AA_NewFileURIWithSql(getter_AddRefs(dbURI), aFile, kCreateTestTable);
483 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
485 nsRefPtr<aaSqliteChannel> channel = new aaSqliteChannel(dbURI);
486 rv = channel ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
487 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
489 nsCOMPtr<nsIChannel> iChannel;
490 rv = channel->QueryInterface(NS_GET_IID(nsIChannel),
491 getter_AddRefs(iChannel));
492 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
494 nsCOMPtr<nsIURI> channelURI;
495 rv = iChannel->GetURI(getter_AddRefs(channelURI));
496 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
498 PRBool fEqual = PR_FALSE;
499 rv = channelURI->Equals(dbURI, &fEqual);
500 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
501 NS_TEST_ASSERT_MSG(fEqual,
502 "[channel test] channel uri is not equal to db uri");
504 rv = iChannel->GetOriginalURI(getter_AddRefs(channelURI));
505 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
507 rv = channelURI->Equals(dbURI, &fEqual);
508 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
509 NS_TEST_ASSERT_MSG(fEqual,
510 "[channel test] channel original uri is not equal to db uri");
512 nsCOMPtr<nsISupports> owner = do_QueryInterface(this, &rv);
513 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
515 rv = iChannel->SetOwner(owner);
516 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
518 nsCOMPtr<nsISupports> channelOwner;
519 rv = iChannel->GetOwner(getter_AddRefs(channelOwner));
520 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
522 NS_TEST_ASSERT_MSG(owner.get() == channelOwner.get(),
523 "[channel test] owner is not strong refferenced");
525 nsCAutoString contentType;
526 rv = iChannel->GetContentType(contentType);
527 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
528 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
529 "[channel test] content type is not equal to text/dbxml");
531 nsRefPtr<aaAttributeCheckObserver> observer =
532 new aaAttributeCheckObserver(aRunner, owner);
533 rv = observer ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
534 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
536 rv = aRunner->ArmTimer(500);
537 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
539 nsrefcnt channelRefCount = iChannel->AddRef() - 1;
540 rv = iChannel->AsyncOpen(observer, nsnull);
541 NS_TEST_ASSERT_OK(rv);
542 if (NS_FAILED(rv)) {
543 (void) aRunner->MarkTestEnd(this);
544 NS_ENSURE_SUCCESS(rv, rv);
547 rv = iChannel->AsyncOpen(observer, nsnull);
548 NS_TEST_ASSERT_MSG(NS_FAILED(rv),
549 "[channel test] channel can be reopenned");
550 rv = NS_OK;
552 rv = iChannel->GetContentType(contentType);
553 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
554 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
555 "[channel test] content type is not text/dbxml");
557 rv = observer->Wait();
558 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
560 NS_TEST_ASSERT_MSG(channelRefCount == iChannel->Release(),
561 "[channel test] invalid channel life support");
563 rv = iChannel->GetOwner(getter_AddRefs(channelOwner));
564 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
566 NS_TEST_ASSERT_MSG(owner.get() == channelOwner.get(),
567 "[channel test] owner is not strong refferenced");
568 (void) aRunner->MarkTestEnd(this);
570 return NS_OK;
573 nsresult
574 aaChannelTest::testChannelContentType(nsITestRunner *aRunner, nsIFile *aFile)
576 nsresult rv = NS_OK;
577 NS_ENSURE_ARG_POINTER(aFile);
579 NS_TEST_BEGIN(aRunner);
581 nsCOMPtr<nsIURI> dbURI;
582 rv = AA_NewFileURIWithSql(getter_AddRefs(dbURI), aFile, kInsertTestRow1);
583 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
585 nsCOMPtr<nsIChannel> iChannel = new aaSqliteChannel(dbURI);
586 rv = iChannel ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
587 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
589 rv = iChannel->SetLoadFlags(nsIChannel::LOAD_FROM_CACHE);
590 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
592 nsLoadFlags flags;
593 rv = iChannel->GetLoadFlags(&flags);
594 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
595 NS_TEST_ASSERT_MSG(flags == nsIChannel::LOAD_FROM_CACHE,
596 "[channel test] content type is not empty");
598 nsCAutoString contentType;
599 rv = iChannel->GetContentType(contentType);
600 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
601 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
602 "[channel test] content type does not equal to text/dbxml");
604 rv = iChannel->SetContentType(kTestContentType);
605 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
607 rv = iChannel->GetContentType(contentType);
608 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
609 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
610 "[channel test] content type does not equal to text/dbxml");
612 nsRefPtr<aaContentTypeObserver> observer =
613 new aaContentTypeObserver(aRunner, kTestContentType);
614 rv = observer ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
615 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
617 rv = aRunner->ArmTimer(500);
618 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
620 nsCOMPtr<aaTestLoadGroup> loadGroup = new aaTestLoadGroup();
621 rv = loadGroup ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
622 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
624 rv = iChannel->SetLoadGroup(loadGroup);
625 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
627 PRBool isPending = PR_FALSE;
628 rv = iChannel->IsPending(&isPending);
629 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
630 NS_TEST_ASSERT_MSG(!isPending,
631 "[channel test] channel is pending");
633 rv = iChannel->AsyncOpen(observer, nsnull);
634 NS_TEST_ASSERT_OK(rv);
635 if (NS_FAILED(rv)) {
636 (void) aRunner->MarkTestEnd(this);
637 NS_ENSURE_SUCCESS(rv, rv);
640 nsresult channelStatus;
641 rv = iChannel->GetStatus(&channelStatus);
642 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
643 NS_TEST_ASSERT_OK(channelStatus);
645 rv = iChannel->IsPending(&isPending);
646 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
647 NS_TEST_ASSERT_MSG(isPending,
648 "[channel test] channel is not pending");
649 NS_TEST_ASSERT_MSG(loadGroup->PickRequest(),
650 "[channel test] ichannel is not set to load group");
652 rv = iChannel->GetContentType(contentType);
653 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
654 NS_TEST_ASSERT_MSG(contentType.Equals(kTransportContentType),
655 "[channel test] content type is not text/dbxml");
657 rv = iChannel->SetContentType(kTestContentType);
658 NS_TEST_ASSERT_MSG(NS_FAILED(rv),
659 "[channel test] content type can be set before OnStartRequest");
660 rv = NS_OK;
662 rv = observer->Wait(aaChannelObserver::START);
663 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
665 rv = iChannel->SetContentType(kTestContentType);
666 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
668 rv = observer->Wait();
669 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
671 rv = iChannel->GetStatus(&channelStatus);
672 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
673 NS_TEST_ASSERT_OK(channelStatus);
675 NS_TEST_ASSERT_MSG(!loadGroup->PickRequest(),
676 "[channel test] ichannel is not cleared to load group");
678 rv = iChannel->GetContentType(contentType);
679 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
680 NS_TEST_ASSERT_MSG(contentType.Equals(kTestContentType),
681 "[channel test] content type is not text/xml");
683 rv = iChannel->IsPending(&isPending);
684 NS_TEST_ASSERT_OK(rv); NS_ENSURE_SUCCESS(rv, rv);
685 NS_TEST_ASSERT_MSG(!isPending,
686 "[channel test] channel is pending");
687 (void) aRunner->MarkTestEnd(this);
689 return NS_OK;