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: */
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"
25 #include "nsIThreadManager.h"
26 #include "nsIThread.h"
27 #include "nsServiceManagerUtils.h"
28 #include "nsStringAPI.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
58 aaChannelObserver(nsITestRunner
* aRunner
)
62 NS_DECL_NSIREQUESTOBSERVER
63 NS_DECL_NSISTREAMLISTENER
71 nsresult
Wait(EState aEventType
= STOP
);
73 virtual ~aaChannelObserver() {}
75 nsITestRunner
* PickRunner() { return mRunner
; }
79 nsCOMPtr
<nsITestRunner
> mRunner
;
82 NS_IMPL_ISUPPORTS2(aaChannelObserver
,
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");
97 aaChannelObserver::OnStopRequest(nsIRequest
*aRequest
, nsISupports
*aContext
,
100 NS_TEST_BEGIN(mRunner
);
101 NS_TEST_ASSERT_MSG(DATA
== mState
|| START
== mState
,
102 "[channel test] onStopRequest is not called last");
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");
119 aaChannelObserver::Wait(EState aEventType
)
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
);
141 /********************aaAttributeCheckObserver*****************************/
142 class aaAttributeCheckObserver
: public aaChannelObserver
145 aaAttributeCheckObserver(nsITestRunner
*aRunner
, nsISupports
*aOwner
)
146 : aaChannelObserver(aRunner
)
148 NS_DECL_ISUPPORTS_INHERITED
149 NS_DECL_NSISTREAMLISTENER
150 NS_DECL_NSIREQUESTOBSERVER
152 virtual ~aaAttributeCheckObserver() {}
153 nsresult
checkAttributes(nsIRequest
*aRequest
);
155 nsCOMPtr
<nsISupports
> mOwner
;
158 NS_IMPL_ISUPPORTS_INHERITED0(aaAttributeCheckObserver
,
162 aaAttributeCheckObserver::OnStartRequest(nsIRequest
*aRequest
,
163 nsISupports
*aContext
)
165 checkAttributes(aRequest
);
166 return aaChannelObserver::OnStartRequest(aRequest
, aContext
);
170 aaAttributeCheckObserver::OnStopRequest(nsIRequest
*aRequest
,
171 nsISupports
*aContext
, nsresult aStatusCode
)
173 checkAttributes(aRequest
);
174 return aaChannelObserver::OnStopRequest(aRequest
, aContext
, aStatusCode
);
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
,
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");
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");
216 /********************aaContentTypeObserver*****************************/
217 class aaContentTypeObserver
: public aaChannelObserver
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
228 virtual ~aaContentTypeObserver() {}
229 nsresult
checkContentType(nsIRequest
*aRequest
,
230 const nsACString
& aContentType
);
232 nsCAutoString mNewContentType
;
235 NS_IMPL_ISUPPORTS_INHERITED0(aaContentTypeObserver
,
239 aaContentTypeObserver::OnStartRequest(nsIRequest
*aRequest
,
240 nsISupports
*aContext
)
242 checkContentType(aRequest
, kTransportContentType
);
243 return aaChannelObserver::OnStartRequest(aRequest
, aContext
);
247 aaContentTypeObserver::OnStopRequest(nsIRequest
*aRequest
,
248 nsISupports
*aContext
, nsresult aStatusCode
)
250 checkContentType(aRequest
, mNewContentType
);
251 return aaChannelObserver::OnStopRequest(aRequest
, aContext
, aStatusCode
);
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
,
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");
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");
287 /********************aaTestLoadGroup***************************/
288 class aaTestLoadGroup
: public nsILoadGroup
296 nsIRequest
* PickRequest() { return mRequest
.get(); }
298 ~aaTestLoadGroup() {}
300 nsCOMPtr
<nsIRequest
> mRequest
;
303 NS_IMPL_ISUPPORTS2(aaTestLoadGroup
,
304 nsILoadGroup
, nsIRequest
)
306 /* attribute nsIRequestObserver groupObserver; */
308 aaTestLoadGroup::GetGroupObserver(nsIRequestObserver
**aGroupObserver
)
310 return NS_ERROR_NOT_IMPLEMENTED
;
313 aaTestLoadGroup::SetGroupObserver(nsIRequestObserver
*aGroupObserver
)
315 return NS_ERROR_NOT_IMPLEMENTED
;
318 /* attribute nsIRequest defaultLoadRequest; */
320 aaTestLoadGroup::GetDefaultLoadRequest(nsIRequest
**aDefaultLoadRequest
)
322 return NS_ERROR_NOT_IMPLEMENTED
;
325 aaTestLoadGroup::SetDefaultLoadRequest(nsIRequest
*aDefaultLoadRequest
)
327 return NS_ERROR_NOT_IMPLEMENTED
;
330 /* void addRequest (in nsIRequest aRequest, in nsISupports aContext); */
332 aaTestLoadGroup::AddRequest(nsIRequest
*aRequest
, nsISupports
*aContext
)
334 NS_ENSURE_ARG_POINTER(aRequest
);
339 /* void removeRequest (in nsIRequest aRequest, in nsISupports aContext, in
340 * nsresult aStatus); */
342 aaTestLoadGroup::RemoveRequest(nsIRequest
*aRequest
, nsISupports
*aContext
,
345 NS_ENSURE_ARG_POINTER(aRequest
);
346 NS_ENSURE_TRUE(aRequest
== mRequest
.get(), NS_ERROR_FAILURE
);
351 /* readonly attribute nsISimpleEnumerator requests; */
353 aaTestLoadGroup::GetRequests(nsISimpleEnumerator
**aRequests
)
355 return NS_ERROR_NOT_IMPLEMENTED
;
358 /* readonly attribute unsigned long activeCount; */
360 aaTestLoadGroup::GetActiveCount(PRUint32
*aActiveCount
)
362 return NS_ERROR_NOT_IMPLEMENTED
;
365 /* attribute nsIInterfaceRequestor notificationCallbacks; */
367 aaTestLoadGroup::GetNotificationCallbacks(
368 nsIInterfaceRequestor
**aNotificationCallbacks
)
370 return NS_ERROR_NOT_IMPLEMENTED
;
373 aaTestLoadGroup::SetNotificationCallbacks(
374 nsIInterfaceRequestor
*aNotificationCallbacks
)
376 return NS_ERROR_NOT_IMPLEMENTED
;
379 /* readonly attribute AUTF8String name; */
381 aaTestLoadGroup::GetName(nsACString
& aName
)
383 return NS_ERROR_NOT_IMPLEMENTED
;
386 /* boolean isPending (); */
388 aaTestLoadGroup::IsPending(PRBool
*_retval NS_OUTPARAM
)
390 return NS_ERROR_NOT_IMPLEMENTED
;
393 /* readonly attribute nsresult status; */
395 aaTestLoadGroup::GetStatus(nsresult
*aStatus
)
397 return NS_ERROR_NOT_IMPLEMENTED
;
400 /* void cancel (in nsresult aStatus); */
402 aaTestLoadGroup::Cancel(nsresult aStatus
)
404 return NS_ERROR_NOT_IMPLEMENTED
;
407 /* void suspend (); */
409 aaTestLoadGroup::Suspend()
411 return NS_ERROR_NOT_IMPLEMENTED
;
414 /* void resume (); */
416 aaTestLoadGroup::Resume()
418 return NS_ERROR_NOT_IMPLEMENTED
;
421 /* attribute nsILoadGroup loadGroup; */
423 aaTestLoadGroup::GetLoadGroup(nsILoadGroup
* *aLoadGroup
)
425 return NS_ERROR_NOT_IMPLEMENTED
;
428 aaTestLoadGroup::SetLoadGroup(nsILoadGroup
* aLoadGroup
)
430 return NS_ERROR_NOT_IMPLEMENTED
;
433 /* attribute nsLoadFlags loadFlags; */
435 aaTestLoadGroup::GetLoadFlags(nsLoadFlags
*aLoadFlags
)
437 return NS_ERROR_NOT_IMPLEMENTED
;
440 aaTestLoadGroup::SetLoadFlags(nsLoadFlags aLoadFlags
)
442 return NS_ERROR_NOT_IMPLEMENTED
;
445 /********************aaChannelTest*****************************/
447 aaChannelTest::aaChannelTest()
451 NS_IMPL_ISUPPORTS1(aaChannelTest
, nsITest
)
454 aaChannelTest::Test(nsITestRunner
*aRunner
)
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
);
474 aaChannelTest::testChannelAttributes(nsITestRunner
*aRunner
, nsIFile
*aFile
)
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
);
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");
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);
574 aaChannelTest::testChannelContentType(nsITestRunner
*aRunner
, nsIFile
*aFile
)
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
);
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
);
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");
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);