kerneltest/e32test/dmav2/dma_api_tests.cpp
changeset 45 329ab0095843
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/dmav2/dma_api_tests.cpp	Mon Jan 18 21:31:10 2010 +0200
@@ -0,0 +1,188 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test\dma\dma_api_tests.cpp
+// 
+// Overview:
+//  This file contains API tests for the new DMA framework
+//
+
+#define __E32TEST_EXTENSION__
+#include "d_dma2.h"
+#include "u32std.h"
+#include "t_dma2.h"
+#include "cap_reqs.h"
+
+#include <e32test.h>
+#include <e32debug.h>
+#include <e32svr.h>
+
+static RTest test(_L("DMA Test Framework API"));
+//----------------------------------------------------------------------------------------------
+//! @SYMTestCaseID      KBASE-DMA-2564
+//! @SYMTestType        CIT
+//! @SYMPREQ            REQ
+//! @SYMTestCaseDesc    This test checks the correct behaviour of Open API in the new DMA framework
+//!
+//! @SYMTestActions     
+//!						1.  Open a DMA channel
+//!						2.	Verify that channel is really open.
+//!
+//! @SYMTestExpectedResults 
+//!						1.  DMA channel opens and KErrNone returned
+//!						2.  Call to ChannelIsOpened() return as ETrue.
+//!
+//! @SYMTestPriority        High
+//! @SYMTestStatus          Implemented
+//----------------------------------------------------------------------------------------------
+void test_open_api()
+{
+	//TO DO : Expose TInt Open(const SCreateInfo& aInfo, TDmaChannel*& aChannel)
+	//TO DO : Implement more test cases
+	test.Start(_L("*** Testing Open() API  ***"));
+
+	test.Next(_L("Open session"));
+	RDmaSession session;
+	TInt r = session.Open();
+	test_KErrNone(r);
+
+	TUint channelCookie_open_api=0;
+	
+	test.Next(_L("Open DMA Channel"));
+	channelCookie_open_api=0;
+	r = session.ChannelOpen(16, channelCookie_open_api);
+	test.Printf(_L("cookie recieved = 0x%08x\n"), channelCookie_open_api);
+	test_KErrNone(r);
+
+	//Check if channel is open
+	// test.Printf(_L("Verify that the specified DMA channel is opened\n"));	
+	// TBool channelOpened;
+	// TBool channelNotOpened = EFalse;
+	// r = session.ChannelIsOpened(channelCookie_open_api,  channelOpened);
+	// test_KErrNone(r);	
+ 	// TEST_ASSERT(channelOpened != channelNotOpened)
+	
+	//close channel
+	test.Next(_L("Channel close"));
+	r = session.ChannelClose(channelCookie_open_api);
+	test_KErrNone(r);
+	
+	RTest::CloseHandleAndWaitForDestruction(session);
+	test.End();
+}
+
+//----------------------------------------------------------------------------------------------
+//! @SYMTestCaseID      KBASE-DMA-2568
+//! @SYMTestType        CIT
+//! @SYMPREQ            REQ
+//! @SYMTestCaseDesc    This test checks the correct behaviour of Close API in the new DMA framework
+//!
+//! @SYMTestActions     
+//!						1.  Open a DMA channel
+//!						2.	Open DMA Channel again
+//!						3	Close the DMA channel.
+//!						4	Open DMA channel to verify that the DMA channel closed.
+//!						5.	Open DMA channel again.
+//!						6.	Queue a request on the channel.
+//!						7.	Close DMA channel while request is still queued on it.
+//!
+//! @SYMTestExpectedResults 
+//!						1.  DMA channel opens and KErrNone returned.
+//!						2.	DMA Framework returns KErrInUse as channel is already open.					
+//!						3.	DMA channel closes and KErrNone returned.
+//!						4.	DMA channel opens and KErrNone returned.
+//!						5.	DMA Framework returns KErrInUse as channel is already open.
+//!						6.	DMA request queued and KErrNone returned.
+//!						7.	DMA channel closes and DMA framework flags an error.
+//!							
+//!
+//! @SYMTestPriority        High
+//! @SYMTestStatus          Implemented
+//----------------------------------------------------------------------------------------------
+void test_close_api()
+{
+	test.Start(_L("*** Testing Close() API  ***"));
+	
+	test.Next(_L("Open session"));
+	RDmaSession session;
+	TInt r = session.Open();
+	test_KErrNone(r);
+
+	const TInt size = 64 * KKilo;
+	TUint reqCookieNewStyle_close_api=0;	
+	TUint channelCookie_close_api=0;
+	
+	test.Next(_L("Open a single DMA channel"));
+	r = session.ChannelOpen(16, channelCookie_close_api);
+	test.Printf(_L("cookie recieved = 0x%08x\n"), channelCookie_close_api);
+	test_KErrNone(r);
+
+	// test.Next(_L("Open DMA channel again"));
+	// TUint channelCookie_close_api_1=0;
+	// r = session.ChannelOpen(16, channelCookie_close_api_1);
+	// test.Printf(_L("Verify that DMA channel is already opened\n"));
+	// test_Equal(KErrInUse,r); 
+
+	test.Next(_L("Close the DMA channel"));
+	r = session.ChannelClose(channelCookie_close_api);
+	test_KErrNone(r);
+
+	test.Next(_L("Open DMA channel again"));
+	r = session.ChannelOpen(16, channelCookie_close_api);
+	test.Printf(_L("Verify that DMA channel was closed\n"));
+	test_KErrNone(r); 
+
+	//Fails if a request is created and cancel
+	test.Next(_L("Queue a request on the channel"));
+  	r = session.RequestCreateNew(channelCookie_close_api, reqCookieNewStyle_close_api); //Create Dma request (with new-style callback)
+  	test.Printf(_L("cookie recieved for open channel = 0x%08x\n"), reqCookieNewStyle_close_api);
+  	test_KErrNone(r);
+  
+  	TDmaTransferArgs transferArgs_close_api;
+  	transferArgs_close_api.iSrcConfig.iAddr = 0;
+  	transferArgs_close_api.iDstConfig.iAddr = size;
+  	transferArgs_close_api.iSrcConfig.iFlags = KDmaMemAddr;
+  	transferArgs_close_api.iDstConfig.iFlags = KDmaMemAddr;
+  	transferArgs_close_api.iTransferCount = size;
+  	r = session.FragmentRequest(reqCookieNewStyle_close_api, transferArgs_close_api);
+  	test_KErrNone(r);
+  	
+  	test.Next(_L("Queue DMA Request"));
+  	TCallbackRecord record_close_api;
+  	r = session.QueueRequest(reqCookieNewStyle_close_api, &record_close_api);
+  	test_KErrNone(r);
+	
+	test.Next(_L("Destroy Dma request"));
+	r = session.RequestDestroy(reqCookieNewStyle_close_api);
+	test_KErrNone(r);
+
+	test.Next(_L("Close the DMA channel"));
+	r = session.ChannelClose(channelCookie_close_api);
+	test_KErrNone(r);
+
+	test.End();
+	RTest::CloseHandleAndWaitForDestruction(session);
+}
+
+void RDmaSession::ApiTest()
+	{
+    test_open_api();     // Verify that Open() opens a DMA channel
+    test_close_api();    // Verify that Close() closes a DMA channel
+	}
+
+void ApiTests()
+	{
+	test.Next(_L("Running framework API tests"));
+	RDmaSession::ApiTest();	
+	test.Close();
+	}