test case for versioning 10,9,8,1
This commit is contained in:
parent
aed71c11ab
commit
17d40ef43c
0
src/tests/sql/__init__.py
Normal file
0
src/tests/sql/__init__.py
Normal file
104
src/tests/sql/init_version_1.sql
Normal file
104
src/tests/sql/init_version_1.sql
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
--- CREATE TABLE IF NOT EXISTS inbox (msgid blob, toaddress text, fromaddress text, subject text, received text, message text, folder text, encodingtype int, read bool, sighash blob, UNIQUE(msgid) ON CONFLICT REPLACE));
|
||||||
|
|
||||||
|
-- CREATE TABLE IF NOT EXISTS `inbox` (
|
||||||
|
-- `msgid` blob NOT NULL,
|
||||||
|
-- `toaddress` text DEFAULT NULL,
|
||||||
|
-- `fromaddress` text DEFAULT NULL,
|
||||||
|
-- `subject` text DEFAULT NULL,
|
||||||
|
-- `received` text DEFAULT NULL,
|
||||||
|
-- `message` text DEFAULT NULL,
|
||||||
|
-- `folder` text DEFAULT NULL,
|
||||||
|
-- `encodingtype` int DEFAULT NULL,
|
||||||
|
-- `read` bool DEFAULT NULL,
|
||||||
|
-- `sighash` blob DEFAULT NULL,
|
||||||
|
-- UNIQUE(msgid) ON CONFLICT REPLACE
|
||||||
|
-- ) ;
|
||||||
|
|
||||||
|
-- CREATE TABLE IF NOT EXISTS `sent` (
|
||||||
|
-- `msgid` blob NOT NULL,
|
||||||
|
-- `toaddress` text DEFAULT NULL,
|
||||||
|
-- `toripe` blob DEFAULT NULL,
|
||||||
|
-- `fromaddress` text DEFAULT NULL,
|
||||||
|
-- `subject` text DEFAULT NULL,
|
||||||
|
-- `message` text DEFAULT NULL,
|
||||||
|
-- `ackdata` blob DEFAULT NULL,
|
||||||
|
-- `senttime` integer DEFAULT NULL,
|
||||||
|
-- `lastactiontime` integer DEFAULT NULL,
|
||||||
|
-- `sleeptill` integer DEFAULT NULL,
|
||||||
|
-- `status` text DEFAULT NULL,
|
||||||
|
-- `retrynumber` integer DEFAULT NULL,
|
||||||
|
-- `folder` text DEFAULT NULL,
|
||||||
|
-- `encodingtype` int DEFAULT NULL,
|
||||||
|
-- `ttl` int DEFAULT NULL,
|
||||||
|
-- UNIQUE(msgid) ON CONFLICT REPLACE
|
||||||
|
-- ) ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `settings`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `settings` (
|
||||||
|
`key` blob NOT NULL,
|
||||||
|
`value` text DEFAULT NULL,
|
||||||
|
UNIQUE(key) ON CONFLICT REPLACE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `settings`
|
||||||
|
--
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO `settings` VALUES ('version','1');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `inventory`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `inventory` (
|
||||||
|
`hash` blob NOT NULL,
|
||||||
|
`objecttype` int DEFAULT NULL,
|
||||||
|
`streamnumber` int NOT NULL,
|
||||||
|
`payload` blob DEFAULT NULL,
|
||||||
|
`integer` integer NOT NULL,
|
||||||
|
-- `tag` blob DEFAULT NULL,
|
||||||
|
UNIQUE(hash) ON CONFLICT REPLACE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text,'''
|
||||||
|
-- ''' received text, message text, folder text, encodingtype int, read bool, sighash blob,'''
|
||||||
|
-- ''' UNIQUE(msgid) ON CONFLICT REPLACE)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE sent (msgid blob, toaddress text, toripe blob, fromaddress text, subject text,'''
|
||||||
|
-- ''' message text, ackdata blob, senttime integer, lastactiontime integer,'''
|
||||||
|
-- ''' sleeptill integer, status text, retrynumber integer, folder text, encodingtype int, ttl int)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE subscriptions (label text, address text, enabled bool)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE addressbook (label text, address text, UNIQUE(address) ON CONFLICT IGNORE)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE blacklist (label text, address text, enabled bool)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE whitelist (label text, address text, enabled bool)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE pubkeys (address text, addressversion int, transmitdata blob, time int,'''
|
||||||
|
-- ''' usedpersonally text, UNIQUE(address) ON CONFLICT REPLACE)''')
|
||||||
|
-- # self.cur.execute(
|
||||||
|
-- # '''CREATE TABLE inventory (hash blob, objecttype int, streamnumber int, payload blob,'''
|
||||||
|
-- # ''' expirestime integer, tag blob, UNIQUE(hash) ON CONFLICT REPLACE)''')
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE inventory (hash blob, objecttype int, streamnumber int, payload blob,'''
|
||||||
|
-- ''' expirestime integer, UNIQUE(hash) ON CONFLICT REPLACE)''')
|
||||||
|
-- # self.cur.execute(
|
||||||
|
-- # '''INSERT INTO subscriptions VALUES'''
|
||||||
|
-- # '''('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''')
|
||||||
|
-- self.cur.execute('''CREATE TABLE settings (key blob, value blob, UNIQUE(key) ON CONFLICT REPLACE)''')
|
||||||
|
-- # self.cur.execute('''INSERT INTO settings VALUES('version','11')''')
|
||||||
|
-- # self.cur.execute('''INSERT INTO settings VALUES('lastvacuumtime',?)''', (
|
||||||
|
-- # int(time.time()),))
|
||||||
|
-- self.cur.execute(
|
||||||
|
-- '''CREATE TABLE objectprocessorqueue'''
|
||||||
|
-- ''' (objecttype int, data blob, UNIQUE(objecttype, data) ON CONFLICT REPLACE)''')
|
||||||
|
-- self.conn.commit()
|
9
src/tests/sql/init_version_10.sql
Normal file
9
src/tests/sql/init_version_10.sql
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
--
|
||||||
|
-- Table structure for table `addressbook`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `addressbook` (
|
||||||
|
`label` blob NOT NULL,
|
||||||
|
`address` text DEFAULT NULL,
|
||||||
|
UNIQUE(address) ON CONFLICT IGNORE
|
||||||
|
) ;
|
16
src/tests/sql/init_version_8.sql
Normal file
16
src/tests/sql/init_version_8.sql
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
--
|
||||||
|
-- Table structure for table `inbox`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `inbox` (
|
||||||
|
`msgid` blob NOT NULL,
|
||||||
|
`toaddress` text DEFAULT NULL,
|
||||||
|
`fromaddress` text DEFAULT NULL,
|
||||||
|
`subject` text DEFAULT NULL,
|
||||||
|
`received` text DEFAULT NULL,
|
||||||
|
`message` text DEFAULT NULL,
|
||||||
|
`folder` text DEFAULT NULL,
|
||||||
|
`encodingtype` int DEFAULT NULL,
|
||||||
|
`read` bool DEFAULT NULL,
|
||||||
|
UNIQUE(msgid) ON CONFLICT REPLACE
|
||||||
|
) ;
|
37
src/tests/sql/init_version_9.sql
Normal file
37
src/tests/sql/init_version_9.sql
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
--
|
||||||
|
-- Table structure for table `sent`
|
||||||
|
--
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `sent` (
|
||||||
|
`msgid` blob NOT NULL,
|
||||||
|
`toaddress` text DEFAULT NULL,
|
||||||
|
`toripe` blob DEFAULT NULL,
|
||||||
|
`fromaddress` text DEFAULT NULL,
|
||||||
|
`subject` text DEFAULT NULL,
|
||||||
|
`message` text DEFAULT NULL,
|
||||||
|
`ackdata` blob DEFAULT NULL,
|
||||||
|
`senttime` integer DEFAULT NULL,
|
||||||
|
`lastactiontime` integer DEFAULT NULL,
|
||||||
|
`sleeptill` integer DEFAULT NULL,
|
||||||
|
`status` text DEFAULT NULL,
|
||||||
|
`retrynumber` integer DEFAULT NULL,
|
||||||
|
`folder` text DEFAULT NULL,
|
||||||
|
`encodingtype` int DEFAULT NULL,
|
||||||
|
`ttl` int DEFAULT NULL,
|
||||||
|
UNIQUE(msgid) ON CONFLICT REPLACE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `pubkeys`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `pubkeys` (
|
||||||
|
`hash` text,
|
||||||
|
`addressversion` int,
|
||||||
|
`transmitdata` blob,
|
||||||
|
`time` int,
|
||||||
|
`usedpersonally` text,
|
||||||
|
UNIQUE(hash) ON CONFLICT REPLACE
|
||||||
|
) ;
|
|
@ -1,6 +1,7 @@
|
||||||
"""
|
"""
|
||||||
Test for ECC blind signatures
|
Test for sqlThread blind signatures
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
import shutil # used for moving the messages.dat file
|
import shutil # used for moving the messages.dat file
|
||||||
|
@ -10,9 +11,10 @@ import threading
|
||||||
import time
|
import time
|
||||||
# print sys.path
|
# print sys.path
|
||||||
# import state
|
# import state
|
||||||
|
# import sql
|
||||||
|
# from sql import init_version_1.sql
|
||||||
from ..state import appdata
|
from ..state import appdata
|
||||||
from ..helper_sql import sqlStoredProcedure
|
from ..helper_sql import sqlStoredProcedure
|
||||||
|
|
||||||
# import threading
|
# import threading
|
||||||
# from hashlib import sha256
|
# from hashlib import sha256
|
||||||
# from ..helper_sql import sqlQuery
|
# from ..helper_sql import sqlQuery
|
||||||
|
@ -20,13 +22,12 @@ from ..helper_sql import sqlStoredProcedure
|
||||||
# from common import cleanup
|
# from common import cleanup
|
||||||
from ..class_sqlThread import (sqlThread, UpgradeDB)
|
from ..class_sqlThread import (sqlThread, UpgradeDB)
|
||||||
|
|
||||||
|
|
||||||
class TestSqlThread(unittest.TestCase):
|
class TestSqlThread(unittest.TestCase):
|
||||||
"""
|
"""
|
||||||
Test case for SQLThread
|
Test case for SQLThread
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# def __init__(self):
|
|
||||||
# initialise Db connection
|
|
||||||
conn = sqlite3.connect(appdata + 'messages.dat')
|
conn = sqlite3.connect(appdata + 'messages.dat')
|
||||||
conn.text_factory = str
|
conn.text_factory = str
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
|
@ -38,77 +39,133 @@ class TestSqlThread(unittest.TestCase):
|
||||||
sqlLookup.daemon = False
|
sqlLookup.daemon = False
|
||||||
sqlLookup.start()
|
sqlLookup.start()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUp(cls):
|
||||||
|
tables = list(cls.cur.execute("select name from sqlite_master where type is 'table'"))
|
||||||
|
cls.cur.executescript(';'.join(["drop table if exists %s" % i for i in tables]))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDown(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
# Stop sql thread
|
# Stop sql thread
|
||||||
sqlStoredProcedure('exit')
|
sqlStoredProcedure('exit')
|
||||||
print "...TearDown"
|
|
||||||
|
|
||||||
def db_connection(self):
|
def db_connection(self):
|
||||||
conn = sqlite3.connect(appdata + 'messages.dat')
|
conn = sqlite3.connect(appdata + 'messages.dat')
|
||||||
conn.text_factory = str
|
conn.text_factory = str
|
||||||
return conn.cursor()
|
return conn.cursor()
|
||||||
|
|
||||||
def normalize_version(self):
|
def normalize_version(self, file):
|
||||||
try:
|
try:
|
||||||
self.cur.execute(
|
root_path = os.path.dirname(os.path.dirname(__file__))
|
||||||
'''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text,'''
|
sql_file_path = os.path.join(root_path, 'tests/sql/')
|
||||||
''' received text, message text, folder text, encodingtype int, read bool, sighash blob,'''
|
sql_file_path = os.path.join(sql_file_path, "init_version_"+file+".sql")
|
||||||
''' UNIQUE(msgid) ON CONFLICT REPLACE)''')
|
sql_file = open(sql_file_path)
|
||||||
self.cur.execute(
|
sql_as_string = sql_file.read()
|
||||||
'''CREATE TABLE sent (msgid blob, toaddress text, toripe blob, fromaddress text, subject text,'''
|
self.cur.executescript(sql_as_string)
|
||||||
''' message text, ackdata blob, senttime integer, lastactiontime integer,'''
|
|
||||||
''' sleeptill integer, status text, retrynumber integer, folder text, encodingtype int, ttl int)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE subscriptions (label text, address text, enabled bool)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE addressbook (label text, address text, UNIQUE(address) ON CONFLICT IGNORE)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE blacklist (label text, address text, enabled bool)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE whitelist (label text, address text, enabled bool)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE pubkeys (address text, addressversion int, transmitdata blob, time int,'''
|
|
||||||
''' usedpersonally text, UNIQUE(address) ON CONFLICT REPLACE)''')
|
|
||||||
# self.cur.execute(
|
|
||||||
# '''CREATE TABLE inventory (hash blob, objecttype int, streamnumber int, payload blob,'''
|
|
||||||
# ''' expirestime integer, tag blob, UNIQUE(hash) ON CONFLICT REPLACE)''')
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE inventory (hash blob, objecttype int, streamnumber int, payload blob,'''
|
|
||||||
''' expirestime integer, UNIQUE(hash) ON CONFLICT REPLACE)''')
|
|
||||||
# self.cur.execute(
|
|
||||||
# '''INSERT INTO subscriptions VALUES'''
|
|
||||||
# '''('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''')
|
|
||||||
self.cur.execute('''CREATE TABLE settings (key blob, value blob, UNIQUE(key) ON CONFLICT REPLACE)''')
|
|
||||||
# self.cur.execute('''INSERT INTO settings VALUES('version','11')''')
|
|
||||||
# self.cur.execute('''INSERT INTO settings VALUES('lastvacuumtime',?)''', (
|
|
||||||
# int(time.time()),))
|
|
||||||
self.cur.execute(
|
|
||||||
'''CREATE TABLE objectprocessorqueue'''
|
|
||||||
''' (objecttype int, data blob, UNIQUE(objecttype, data) ON CONFLICT REPLACE)''')
|
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print err.message
|
|
||||||
if str(err) == 'table inbox already exists':
|
if str(err) == 'table inbox already exists':
|
||||||
print "table inbox already exists"
|
return "table inbox already exists"
|
||||||
else:
|
else:
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
'ERROR trying to create database file (message.dat). Error message: %s\n' % str(err))
|
'ERROR trying to create database file (message.dat). Error message: %s\n' % str(err))
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
|
|
||||||
def clean_db(self):
|
def filter_table_column(self, schema, column):
|
||||||
tables = list(self.cur.execute("select name from sqlite_master where type is 'table'"))
|
for x in schema:
|
||||||
return self.cur.executescript(';'.join(["drop table if exists %s" % i for i in tables]))
|
for y in x:
|
||||||
|
if y == column:
|
||||||
|
yield y
|
||||||
|
|
||||||
def test_sql_thread_version_one(self):
|
def test_sql_thread_version_1(self):
|
||||||
"""
|
"""
|
||||||
Test with version 1
|
Test with version 1
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.clean_db()
|
# normalise Db for version 1
|
||||||
self.normalize_version()
|
self.normalize_version("1")
|
||||||
self.cur.execute('''INSERT INTO settings VALUES('version','1')''')
|
|
||||||
|
# Test versioning
|
||||||
upgrade_db = UpgradeDB()
|
upgrade_db = UpgradeDB()
|
||||||
upgrade_db.cur = self.cur
|
upgrade_db.cur = self.cur
|
||||||
upgrade_db.upgrade_schema_data_1()
|
upgrade_db.upgrade_schema_data_1()
|
||||||
|
|
||||||
|
# Assertion after versioning
|
||||||
|
res = self.cur.execute('''PRAGMA table_info('inventory');''')
|
||||||
|
res = res.fetchall()
|
||||||
|
result = list(self.filter_table_column(res, "tag"))
|
||||||
|
res = [tup for tup in res if any(i in tup for i in ["tag"])]
|
||||||
|
self.assertEqual(result, ['tag'] , "Data not migrated for version 1")
|
||||||
|
self.assertEqual(res, [(5, 'tag', 'blob', 0, "''", 0)] , "Data not migrated for version 1")
|
||||||
|
|
||||||
|
|
||||||
|
def test_sql_thread_version_10(self):
|
||||||
|
"""
|
||||||
|
Test with version 10
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Update version 10
|
||||||
|
self.normalize_version("10")
|
||||||
|
|
||||||
|
# Test versioning
|
||||||
|
upgrade_db = UpgradeDB()
|
||||||
|
upgrade_db.cur = self.cur
|
||||||
|
upgrade_db.upgrade_schema_data_10()
|
||||||
|
|
||||||
|
# Assertion
|
||||||
|
self.cur.execute(''' SELECT count(name) FROM sqlite_master WHERE type='table' AND name='old_addressbook' ''')
|
||||||
|
self.assertNotEqual(self.cur.fetchone(), 1 , "Table old_addressbook not deleted")
|
||||||
|
|
||||||
|
res = self.cur.execute('''PRAGMA table_info('addressbook');''')
|
||||||
|
res = res.fetchall()
|
||||||
|
result = list(self.filter_table_column(res, "address"))
|
||||||
|
self.assertEqual(result, ['address'] , "Data not migrated for version 10")
|
||||||
|
|
||||||
|
|
||||||
|
def test_sql_thread_version_9(self):
|
||||||
|
"""
|
||||||
|
Test with version 9
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Update version 9
|
||||||
|
self.normalize_version("9")
|
||||||
|
|
||||||
|
# Test versioning
|
||||||
|
upgrade_db = UpgradeDB()
|
||||||
|
upgrade_db.cur = self.cur
|
||||||
|
upgrade_db.upgrade_schema_data_9()
|
||||||
|
|
||||||
|
# Assertion
|
||||||
|
self.cur.execute(''' SELECT count(name) FROM sqlite_master WHERE type='table' AND name='pubkeys_backup' ''')
|
||||||
|
self.assertNotEqual(self.cur.fetchone(), 1 , "Table pubkeys_backup not deleted")
|
||||||
|
|
||||||
|
res = self.cur.execute('''PRAGMA table_info('pubkeys');''')
|
||||||
|
res = res.fetchall()
|
||||||
|
result = list(self.filter_table_column(res, "address"))
|
||||||
|
self.assertEqual(result, ['address'] , "Data not migrated for version 9")
|
||||||
|
|
||||||
|
|
||||||
|
def test_sql_thread_version_8(self):
|
||||||
|
"""
|
||||||
|
Test with version 8
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Update version 8
|
||||||
|
self.normalize_version("8")
|
||||||
|
|
||||||
|
# Test versioning
|
||||||
|
upgrade_db = UpgradeDB()
|
||||||
|
upgrade_db.cur = self.cur
|
||||||
|
upgrade_db.upgrade_schema_data_8()
|
||||||
|
|
||||||
|
# # Assertion
|
||||||
|
res = self.cur.execute('''PRAGMA table_info('inbox');''')
|
||||||
|
res = res.fetchall()
|
||||||
|
result = list(self.filter_table_column(res, "sighash"))
|
||||||
|
self.assertEqual(result, ['sighash'] , "Data not migrated for version 8")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user