[tracker/miner-web-review: 29/74] libtracker-data: New functional test cases added



commit ab913130d7f4474dc1210f543420050546bdae15
Author: Amit Jain <ext-amit 1 jain nokia com>
Date:   Thu Feb 25 11:00:15 2010 +0100

    libtracker-data: New functional test cases added
    
    New test cases for SPARQL UPDATE queries for insertion and deletion
    operations. New test cases for dates storage verification as per
    sprint task MCoFr-406.

 tests/functional-tests/01-insertion.py |  747 ++++++++++++++++++++++++++++++--
 1 files changed, 704 insertions(+), 43 deletions(-)
---
diff --git a/tests/functional-tests/01-insertion.py b/tests/functional-tests/01-insertion.py
index 4b1f9e8..3ed45a2 100755
--- a/tests/functional-tests/01-insertion.py
+++ b/tests/functional-tests/01-insertion.py
@@ -16,55 +16,716 @@
 # License along with this library; if not, write to the
 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 # Boston, MA  02110-1301, USA.
-#
 
 
-import dbus
+import sys,os,dbus
 import unittest
+import time
 import random
 
 TRACKER = 'org.freedesktop.Tracker1'
 TRACKER_OBJ = '/org/freedesktop/Tracker1/Resources'
 RESOURCES_IFACE = "org.freedesktop.Tracker1.Resources"
 
-class TestInsertion (unittest.TestCase):
-
-    def setUp (self):
-        bus = dbus.SessionBus ()
-        tracker = bus.get_object (TRACKER, TRACKER_OBJ)
-        self.resources = dbus.Interface (tracker,
-                                         dbus_interface=RESOURCES_IFACE);
-
-    def test_simple_insertion (self):
-        """
-        1. Insert a InformationElement with title.
-        2. TEST: Query the title of that information element
-        3. Remove the InformationElement to keep everything as it was before
-        """
-        
-        uri = "tracker://test_insertion_1/" + str(random.randint (0, 100))
-        
-        insert = """
-        INSERT { <%s> a nie:InformationElement;
-                      nie:title \"test_insertion_1\". }
-        """ % (uri)
-        self.resources.SparqlUpdate (insert)
-
-        query = """
-        SELECT ?t WHERE {
-           <%s> a nie:InformationElement ;
-               nie:title ?t .
-        }
-        """ % (uri)
-        results = self.resources.SparqlQuery (query)
-
-        self.assertEquals (str(results[0][0]), "test_insertion_1")
-
-        delete = """
-        DELETE { <%s> a nie:InformationElement. }
-        """ % (uri)
-        self.resources.SparqlUpdate (delete)
-        
-
-if __name__ == '__main__':
-    unittest.main()
+
+class TestUpdate (unittest.TestCase):
+	
+	def setUp(self):
+		bus = dbus.SessionBus()
+	        tracker = bus.get_object(TRACKER, TRACKER_OBJ)
+		self.resources = dbus.Interface (tracker,
+		                                 dbus_interface=RESOURCES_IFACE)
+
+
+	def sparql_update(self,query):
+		return self.resources.SparqlUpdate(query)
+
+	def query(self,query):
+		return self.resources.SparqlQuery(query)
+	
+
+""" Insertion test cases """
+class s_insert(TestUpdate):
+	
+
+	def test_insert_01(self):
+
+		"""
+                1. Insert a InformationElement with title.
+                2. TEST: Query the title of that information element
+                3. Remove the InformationElement to keep everything as it was before
+                """
+
+                uri = "tracker://test_insert_01/" + str(random.randint (0, 100))
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+                        nie:title \"test_insert_01\". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+                query = """
+                SELECT ?t WHERE {
+                <%s> a nie:InformationElement ;
+                nie:title ?t .
+                }
+                """ % (uri)
+                results = self.query (query)
+
+                self.assertEquals (str(results[0][0]), "test_insert_01")
+
+		""" delete the inserted item """
+                delete = """
+                DELETE { <%s> a nie:InformationElement. }
+                """ % (uri)
+                self.sparql_update (delete)
+
+		
+	def test_insert_02(self):
+                ''' SparqlUpdate: Insert triples and check using SparqlQuery'''
+
+                self.sparql_update('INSERT {<urn:uuid:7646007> a nco:Contact; \
+                nco:fullname "Artist_1_update". \
+                <file:///media/PIKKUTIKKU/5000_songs_with_metadata_and_album_arts/Artist_1/1_Album/10_song3.mp3> a nmm:MusicPiece,nfo:FileDataObject,nmm:MusicAlbum;\
+                nfo:fileName "10_song.mp3"; \
+                nfo:fileLastModified "2008-10-23T13:47:02" ; \
+                nfo:fileCreated "2008-12-16T12:41:20"; \
+                nfo:fileSize 17630; \
+                nmm:length 219252; \
+                nmm:albumTitle "anything".}')
+
+                self.verify_test_insert_02()
+
+
+        def verify_test_insert_02(self):
+
+                result = self.query('SELECT ?artist ?date  WHERE{ \
+                ?contact nco:fullname ?artist . \
+		?time nfo:fileCreated ?date . \
+                FILTER (?artist = "Artist_1_update") \
+                }')
+		print result
+
+                for i in range(len(result)):
+                        if result[i][0] == 'Artist_1_update':
+                                if  result[i][1] == 'anything' and result[i][2] == '219252':
+                                        self.assert_(True,'Pass')
+					return
+                                else:
+					if i < range(len(result) - 1):
+						continue
+					else:
+                                        	self.fail('Fail %s' %result)
+
+
+        def test_insert_03(self):
+                ''' SparqlUpdate: Insert triples and check using SparqlQuery'''
+
+		self.sparql_update('INSERT {<urn:uuid:7646004> a nco:Contact; \
+                nco:fullname "Artist_4_update". \
+                <file:///media/PIKKUTIKKU/5000_songs_with_metadata_and_album_arts/Artist_4/4_Album/4_song_1.mp3> a nmm:MusicPiece,nfo:FileDataObject;\
+                nfo:fileName "4_song_1.mp3"; \
+                nfo:fileCreated "2008-12-16T12:41:20"; \
+                nfo:fileLastModified "2008-12-23T13:47:02" ; \
+                nfo:fileSize 17630; \
+                nmm:musicAlbum "4_Album_update"; \
+                nmm:trackNumber "11"; \
+                nmm:length 219252; \
+                nmm:performer <urn:uuid:7646004>.}')
+
+                self.verify_test_insert_03()
+
+
+        def verify_test_insert_03(self):
+
+                result = self.query('SELECT ?artist ?album ?len ?trkNo ?fname ?fSz  WHERE{ \
+                ?contact nco:fullname ?artist . \
+                ?song nmm:musicAlbum ?album ; \
+                nmm:length ?len  ;\
+                nmm:trackNumber ?trkNo.\
+                ?songfile nfo:fileName ?fname ;\
+                nfo:fileSize ?fSz .\
+                FILTER (?fname = "4_song_1.mp3") \
+                }')
+                print len(result)
+
+                for i in range(len(result)):
+                        if result[i][0] == 'Artist_4_update':
+                                if  result[i][1] == '4_Album_update' and result[i][2] == '219252' and result[i][3] == '11' and result[i][4] == '4_song_1.mp3' and result[i][5] == '17630':
+                                        self.assert_(True,'Pass')
+					return
+                                else:
+					if i < range(len(result) - 1):
+						continue
+					else:
+                                        	self.fail('Fail %s' %result)
+
+	def test_insert_04(self):
+                """Insert, delete same single valued properties multiple times."""
+		
+		""" Delete single valued properties of music file.""" 	
+		self.sparql_update('DELETE { <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:usageCounter ?v } WHERE { \
+		<file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:usageCounter ?v . }')
+		self.sparql_update('DELETE { <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:contentAccessed ?v } WHERE { \
+		<file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:contentAccessed ?v . }')
+		
+
+		""" Insert the same single valued properties of music file.""" 	
+                self.sparql_update('INSERT { \
+                <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> a nmm:MusicPiece,nfo:FileDataObject;\
+		nie:usageCounter "1"; \
+		nie:contentAccessed "2000-01-01T00:40:47Z" . }')
+
+		""" Delete again the single valued properties of music file.""" 	
+		self.sparql_update('DELETE { <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:usageCounter ?v } WHERE { \
+		<file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:usageCounter ?v . }')
+		self.sparql_update('DELETE { <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:contentAccessed ?v } WHERE { \
+		<file:///media/PIKKUTIKKU/album_4/4_song4.mp3> nie:contentAccessed ?v . }')
+		
+
+		""" Insert the same single valued properties of music file with different values.""" 	
+                self.sparql_update('INSERT { \
+                <file:///media/PIKKUTIKKU/album_4/4_song4.mp3> a nmm:MusicPiece,nfo:FileDataObject;\
+		nie:usageCounter "2"; \
+		nie:contentAccessed "2000-01-01T00:40:48Z" . }')
+
+		""" Query for the property values and verify whether the last change is applied."""
+                result = self.query('SELECT ?song ?time  WHERE{ \
+		?song nie:usageCounter "2"; \
+		nie:contentAccessed ?time . \
+                }')
+                print len(result)
+
+                for i in range(len(result)):
+			if result[i][0] == 'file:///media/PIKKUTIKKU/album_4/4_song4.mp3':
+				if  result[i][1] == '2000-01-01T00:40:48Z':
+                                        self.assert_(True,'Pass')
+                                else:
+                                        self.fail('Fail %s' %result)
+
+
+	"""Date-Time storage testing """
+
+	def test_insert_date_01(self):
+
+		"""
+                1. Insert a InformationElement with date having local timezone info.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_01"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T13:14:15+0400". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_01':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][4] == '13' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '14400' :
+                                        self.assert_(True,'Pass')
+                                else:
+                                        self.fail('Fail %s' %result)
+
+	def test_insert_date_02(self):
+
+		"""
+                1. Insert a InformationElement with invalid year in date.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_02"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "204-05-06T13:14:15+0400". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_02':
+				if  result[i][1] != '204':
+                                        self.assert_(True,'Pass')
+                                else:
+                                        self.fail('Fail %s' %result)
+
+
+	def test_insert_date_03(self):
+
+		"""
+                1. Insert a InformationElement with date ending with "Z" in TZD.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_03"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T13:14:15Z". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_03':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][4] == '13' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '0' :
+                                        self.assert_(True,'Pass')
+                                else:
+                                        self.fail('Fail %s' %result)
+
+
+	def test_insert_date_04(self):
+
+		"""
+                1. Insert a InformationElement with date without TZD.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_04"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T13:14:15". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_04':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][4] == '13' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '0' :
+                                        self.assert_(True,'Pass')
+                                else:
+                                        self.fail('Fail %s' %result)
+
+
+	def test_insert_date_05(self):
+
+		"""
+                1. Insert a InformationElement with date without time.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_05"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06':
+                                        self.assert_(True,'Pass')
+                                else:
+					print result[i]
+                                        self.fail('Fail %s' %result)
+
+
+	def test_insert_date_06(self):
+
+		"""
+                1. Insert a InformationElement with date without time but only the "T" separator.
+                """
+
+                uri = "tracker:test_date_06"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+		print result
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_06':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' :
+                                        self.assert_(True,'Pass')
+                                else:
+					print result[i]
+                                        self.fail('Fail %s' %result)
+
+	def test_insert_date_07(self):
+
+		"""
+                1. Insert a InformationElement with date having local timezone info
+		   with some minutes in it.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_07"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T13:14:15+0230". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_07':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][4] == '13' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '9000':
+                                        self.assert_(True,'Pass')
+                                else:
+					print result[i]
+                                        self.fail('Fail %s' %result)
+
+	def test_insert_date_08(self):
+
+		"""
+                1. Insert a InformationElement with date having 
+		local timezone info in negative.
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_08"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T13:14:15-0230". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_08':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][4] == '13' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '-9000':
+                                        self.assert_(True,'Pass')
+                                else:
+					print result[i]
+                                        self.fail('Fail %s' %result)
+
+	def test_insert_date_09(self):
+
+		"""
+                1. Insert a InformationElement with date having some letters instead of numbers
+                2. TEST: Query and verify the various componentes of date
+                """
+
+                uri = "tracker:test_date_09"
+                insert = """
+                INSERT { <%s> a nie:InformationElement;
+			nie:informationElementDate "2004-05-06T1g:14:15-0200". }
+                """ % (uri)
+                self.sparql_update (insert)
+
+		""" verify the inserted item """
+
+		query = 'SELECT ?s fn:year-from-dateTime (?v) \
+		fn:month-from-dateTime (?v) \
+		fn:day-from-dateTime (?v) \
+		fn:hours-from-dateTime (?v) \
+		fn:minutes-from-dateTime (?v) \
+		fn:seconds-from-dateTime (?v) \
+		fn:timezone-from-dateTime (?v) \
+		WHERE { ?s a nie:InformationElement; \
+		nie:informationElementDate ?v . \
+		}'
+                result = self.query (query)
+
+                for i in range(len(result)):
+			if result[i][0] == 'tracker:test_date_09':
+				if  result[i][1] == '2004' and result[i][2] == '05' and result[i][3] == '06' and result[i][5] == '14' and result[i][6] == '15' and result[i][7] == '-9000':
+                                        self.assert_(True,'Pass')
+                                else:
+					print result[i]
+                                        self.fail('Fail %s' %result)
+
+
+
+
+""" Deletion test cases """
+class s_delete(TestUpdate):
+
+        def test_delete_01(self):
+
+                ''' Insert triples and Delete a triple. Verify the deletion with a query'''
+
+		"""first insert """
+                self.sparql_update('INSERT {<urn:uuid:7646001> a nco:Contact; \
+                nco:fullname "Artist_1_delete". \
+                <file:///media/PIKKUTIKKU/5000_songs_with_metadata_and_album_arts/Artist_1/1_Album/11_song_del.mp3> a nmm:MusicPiece,nfo:FileDataObject;\
+                nfo:fileName "11_song_del.mp3"; \
+                nfo:genre "Classic delete"; \
+                nmm:musicAlbum "1_Album_delete"; \
+                nmm:performer <urn:uuid:7646001>.}')
+
+		"""verify the insertion """
+                self.verify_test_insert_delete_01()
+
+		"""now  delete """
+                self.sparql_update('DELETE { \
+                <file:///media/PIKKUTIKKU/5000_songs_with_metadata_and_album_arts/Artist_1/1_Album/11_song_del.mp3> nfo:genre "Classic delete".}')
+                print " After deleting a triple"
+		"""verify the deletion """
+        	self.verify_test_delete_01()
+
+
+        def verify_test_insert_delete_01(self):
+                result = self.query('SELECT ?fname ?genre WHERE  { \
+                ?songfile nfo:fileName ?fname ;\
+                nfo:genre ?genre .\
+                FILTER (?genre = "Classic delete") \
+                }')
+                if result != []:
+                        for i in range(len(result)):
+                                if result[i][0] == '11_song_del.mp3':
+                                        if result[i][1] == "Classic delete":
+                                                self.assert_(True,'Pass')
+					else:
+                                                self.fail('File not inserted, so failing the \'Delete genre \' testcase')
+                else:
+                        self.fail('File not inserted, so failing the \'Delete genre \' testcase')
+
+        def verify_test_delete_01(self):
+
+                result = self.query('SELECT ?fn  WHERE { \
+                ?f a nmm:MusicPiece . \
+                ?f nfo:fileName ?fn ;\
+                nfo:genre ?genre .\
+                FILTER (?genre = "Classic delete") \
+                 }' )
+
+                if result != []:
+                        for i in range(len(result)):
+                                if result[i][0] == '11_song_del.mp3':
+                                        self.fail('Fail %s' %result)
+                                else:
+                                        self.assert_(True,'Pass')
+                else:
+                        self.assert_(True,'Pass')
+
+
+	def test_delete_02 (self):
+
+		"""Delete a MusicAlbum and count the album """
+		"""
+		1. add a music album.
+		2. count the number of albums
+		3. delete an album
+		2. count the number of albums
+		"""
+
+		"""Add a music album """
+                self.sparql_update('INSERT {<06_Album_delete> a nmm:MusicAlbum;\
+                nmm:albumTitle "06_Album_delete".}')
+
+		"""get the count of music albums"""
+                result = self.query('SELECT ?album  WHERE  { \
+                ?album a nmm:MusicAlbum. \
+                } ')
+                count_before_del = len(result)
+                print len(result)
+                print result
+
+
+		"""Delete the added  music album """
+                #self.sparql_update('DELETE { \
+                #<6_Album_delete> a nmm:MusicAlbum.}')
+
+		"""get the count of music albums"""
+                result = self.query('SELECT ?album  WHERE  { \
+                ?albuumm a nmm:MusicAlbum. \
+                } ')
+
+                count_after_del = len(result)
+                print len(result)
+
+                self.assertEquals (count_before_del - 1, count_after_del)
+
+
+""" Batch Update test cases """
+class s_batch_update(TestUpdate):
+
+	def test_batch_insert_01(self):
+		"""batch insertion of 100 contacts:
+		1. delete those existing contacts which we want to insert again.
+		2. insert 100 contacts.
+		3. delete the inserted contacts.
+		"""
+		
+
+		"""delete those existing contacts which we want to insert again.
+		the uid creation is same here as it's created during insertion."""
+		
+     		for j in range(100) :
+			uid = j*1000+1234
+			delete = 'DELETE {?contact a rdfs:Resource} WHERE {?contact nco:contactUID  <%s> }' %uid
+			self.sparql_update (delete)
+
+		""" querry no. of existing contacts. """
+		result = self.query ('SELECT ?c ?Fname ?Gname ?number WHERE { \
+					?c a  nco:PersonContact ; \
+					nco:nameGiven ?Gname ; \
+					nco:nameFamily ?Fname; \
+					nco:hasPhoneNumber ?number. \
+					} LIMIT 1000')
+
+		count_before_insert = len(result)
+		print "contact count before insert %d" %count_before_insert
+
+		"""insert 100 contacts."""
+		INSERT_SPARQL = "; ".join([
+				"<%s> a nco:PersonContact",
+				"nco:nameGiven '%s'",
+				"nco:nameFamily '%s'",
+				"nco:contactUID %s",
+				"nco:hasPhoneNumber <tel:%s>."
+				])
+		a="\n"
+     		"""Preparing a list of Contacts """
+     		for j in range(100) :
+       			contact=  str(random.randint(0, sys.maxint))
+       			names1=['christopher','paul','timothy','stephen','michael','andrew','harold','douglas','timothy','walter','kevin','joshua','robert','matthew','broderick','lacy','rashad','darro','antonia','chas']
+       
+       			names2=['cyril','ronny','stevie','lon','freeman','erin','duncan','kennith','carmine','augustine','young','chadwick','wilburn','jonas','lazaro','brooks','ariel','dusty','tracey','scottie','seymour']
+       			firstname=random.choice(names1)
+       			lastname=random.choice(names2)
+       			contactUID= j*1000+1234
+       			PhoneNumber= str(random.randint(0, sys.maxint))
+       			sparql_insert=INSERT_SPARQL % (contact,firstname,lastname, contactUID,PhoneNumber)
+       			a=a+sparql_insert
+     		INSERT= "INSERT{" + a + "}"
+
+       		self.resources.BatchSparqlUpdate(INSERT)
+
+		""" querry no. of existing contacts. """
+		result = self.query ('SELECT ?c ?Fname ?Gname ?number WHERE { \
+					?c a  nco:PersonContact ; \
+					nco:nameGiven ?Gname ; \
+					nco:nameFamily ?Fname; \
+					nco:hasPhoneNumber ?number. \
+					} LIMIT 1000')
+
+		count_after_insert = len(result)
+		print "contact count after insert %d" %count_after_insert
+
+		""" cleanup the inserted contacts """
+     		for j in range(100) :
+			uid = j*1000+1234
+			delete = 'DELETE {?contact a rdfs:Resource} WHERE {?contact nco:contactUID  <%s> }' %uid
+			self.sparql_update (delete)
+
+		"""test verification """
+		if count_after_insert == 1000:
+			if count_after_insert >= count_before_insert:
+                		self.assert_(True,'Pass')
+			else:
+                		self.fail('batch insertion failed')
+		else:
+			if count_after_insert == count_before_insert + 100:
+                		self.assert_(True,'Pass')
+			else:
+                		self.fail('batch insertion failed')
+			
+
+
+
+
+if __name__ == "__main__":
+	unittest.main()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]