2013-08-28 21:31:52 +00:00
import ClientConstants as CC
2015-03-18 21:46:29 +00:00
import ClientData
2013-08-28 21:31:52 +00:00
import ClientDB
2015-03-18 21:46:29 +00:00
import ClientDefaults
2015-10-07 21:56:22 +00:00
import ClientDownloading
2017-01-04 22:48:23 +00:00
import ClientExporting
2015-06-24 22:10:14 +00:00
import ClientFiles
import ClientGUIManagement
import ClientGUIPages
2015-09-09 22:04:39 +00:00
import ClientImporting
2015-05-20 21:31:40 +00:00
import ClientRatings
2015-10-21 21:53:10 +00:00
import ClientSearch
2017-04-05 21:16:40 +00:00
import ClientServices
2013-10-30 22:28:06 +00:00
import collections
2013-08-28 21:31:52 +00:00
import HydrusConstants as HC
2015-10-21 21:53:10 +00:00
import HydrusData
2014-04-23 20:56:12 +00:00
import HydrusExceptions
2017-07-05 21:09:28 +00:00
import HydrusVideoHandling
2017-05-10 21:33:58 +00:00
import HydrusGlobals as HG
2017-03-02 02:14:56 +00:00
import HydrusNetwork
2015-10-21 21:53:10 +00:00
import HydrusSerialisable
2013-08-28 21:31:52 +00:00
import itertools
import os
2014-10-01 22:58:32 +00:00
import ServerDB
2013-08-28 21:31:52 +00:00
import shutil
2014-11-20 01:48:04 +00:00
import sqlite3
2013-08-28 21:31:52 +00:00
import stat
2013-07-10 20:25:57 +00:00
import TestConstants
2015-03-25 22:04:19 +00:00
import tempfile
2013-08-28 21:31:52 +00:00
import time
import threading
2013-07-10 20:25:57 +00:00
import unittest
2015-04-22 22:57:25 +00:00
import wx
2013-07-10 20:25:57 +00:00
2013-08-28 21:31:52 +00:00
class TestClientDB ( unittest . TestCase ) :
2017-04-05 21:16:40 +00:00
@classmethod
def _clear_db ( cls ) :
2013-10-30 22:28:06 +00:00
2017-04-05 21:16:40 +00:00
cls . _delete_db ( )
2016-03-30 22:56:50 +00:00
2017-04-05 21:16:40 +00:00
# class variable
2017-05-10 21:33:58 +00:00
cls . _db = ClientDB . DB ( HG . test_controller , TestConstants . DB_DIR , ' client ' )
2016-03-30 22:56:50 +00:00
2017-04-05 21:16:40 +00:00
@classmethod
def _delete_db ( cls ) :
2016-03-30 22:56:50 +00:00
2017-04-05 21:16:40 +00:00
cls . _db . Shutdown ( )
2016-03-30 22:56:50 +00:00
2017-04-05 21:16:40 +00:00
while not cls . _db . LoopIsFinished ( ) :
time . sleep ( 0.1 )
2016-03-30 22:56:50 +00:00
2017-04-05 21:16:40 +00:00
db_filenames = cls . _db . _db_filenames . values ( )
2016-05-04 21:50:55 +00:00
2017-04-05 21:16:40 +00:00
for filename in db_filenames :
2016-05-04 21:50:55 +00:00
2017-04-05 21:16:40 +00:00
path = os . path . join ( TestConstants . DB_DIR , filename )
os . remove ( path )
2016-05-04 21:50:55 +00:00
2013-10-30 22:28:06 +00:00
2017-04-05 21:16:40 +00:00
del cls . _db
2013-10-30 22:28:06 +00:00
2013-08-28 21:31:52 +00:00
@classmethod
2017-04-05 21:16:40 +00:00
def setUpClass ( cls ) :
2013-08-28 21:31:52 +00:00
2017-05-10 21:33:58 +00:00
cls . _db = ClientDB . DB ( HG . test_controller , TestConstants . DB_DIR , ' client ' )
2013-08-28 21:31:52 +00:00
2017-07-19 21:21:41 +00:00
HG . test_controller . SetRead ( ' hash_status ' , CC . STATUS_NEW )
2013-08-28 21:31:52 +00:00
@classmethod
2017-04-05 21:16:40 +00:00
def tearDownClass ( cls ) :
2013-08-28 21:31:52 +00:00
2017-04-05 21:16:40 +00:00
cls . _delete_db ( )
2016-02-03 22:12:53 +00:00
2013-08-28 21:31:52 +00:00
2017-04-05 21:16:40 +00:00
def _read ( self , action , * args , * * kwargs ) : return TestClientDB . _db . Read ( action , HC . HIGH_PRIORITY , * args , * * kwargs )
def _write ( self , action , * args , * * kwargs ) : return TestClientDB . _db . Write ( action , HC . HIGH_PRIORITY , True , * args , * * kwargs )
2013-10-30 22:28:06 +00:00
def test_autocomplete ( self ) :
2013-08-28 21:31:52 +00:00
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' c* ' )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
self . assertEqual ( result , [ ] )
2013-10-30 22:28:06 +00:00
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' series:* ' )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
self . assertEqual ( result , [ ] )
2013-10-30 22:28:06 +00:00
#
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' hydrus.png ' )
2013-10-30 22:28:06 +00:00
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
self . _write ( ' import_file ' , file_import_job )
2013-10-30 22:28:06 +00:00
#
2014-08-27 22:15:22 +00:00
service_keys_to_content_updates = { }
2013-10-30 22:28:06 +00:00
content_updates = [ ]
2015-10-14 21:02:25 +00:00
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' car ' , ( hash , ) ) ) )
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:cars ' , ( hash , ) ) ) )
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' maker:ford ' , ( hash , ) ) ) )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
service_keys_to_content_updates [ CC . LOCAL_TAG_SERVICE_KEY ] = content_updates
2013-10-30 22:28:06 +00:00
2014-08-27 22:15:22 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2013-10-30 22:28:06 +00:00
# cars
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' c* ' , add_namespaceless = True )
2013-10-30 22:28:06 +00:00
preds = set ( )
2016-06-22 20:59:24 +00:00
preds . add ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' car ' , min_current_count = 1 ) )
preds . add ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' series:cars ' , min_current_count = 1 ) )
2013-10-30 22:28:06 +00:00
2017-03-02 02:14:56 +00:00
for p in result : self . assertEqual ( p . GetCount ( HC . CONTENT_STATUS_CURRENT ) , 1 )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
self . assertEqual ( set ( result ) , preds )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
# cars
2013-10-30 22:28:06 +00:00
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' c* ' , add_namespaceless = False )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
preds = set ( )
2016-06-22 20:59:24 +00:00
preds . add ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' series:cars ' , min_current_count = 1 ) )
preds . add ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' car ' , min_current_count = 1 ) )
2015-02-18 20:06:43 +00:00
2017-03-02 02:14:56 +00:00
for p in result : self . assertEqual ( p . GetCount ( HC . CONTENT_STATUS_CURRENT ) , 1 )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
self . assertEqual ( set ( result ) , preds )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
#
2013-10-30 22:28:06 +00:00
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' ser* ' )
2015-02-18 20:06:43 +00:00
2017-03-08 23:23:12 +00:00
preds = set ( )
preds . add ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' series:cars ' , min_current_count = 1 ) )
self . assertEqual ( set ( result ) , preds )
2013-10-30 22:28:06 +00:00
#
2017-03-08 23:23:12 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' series:c* ' )
2013-10-30 22:28:06 +00:00
2016-06-22 20:59:24 +00:00
pred = ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' series:cars ' , min_current_count = 1 )
2013-10-30 22:28:06 +00:00
2015-02-18 20:06:43 +00:00
( read_pred , ) = result
2013-10-30 22:28:06 +00:00
2017-03-02 02:14:56 +00:00
self . assertEqual ( read_pred . GetCount ( HC . CONTENT_STATUS_CURRENT ) , 1 )
2013-10-30 22:28:06 +00:00
self . assertEqual ( pred , read_pred )
2013-11-13 21:30:38 +00:00
#
2016-03-30 22:56:50 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' car ' , exact_match = True )
2013-11-13 21:30:38 +00:00
2016-06-22 20:59:24 +00:00
pred = ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' car ' , min_current_count = 1 )
2013-11-13 21:30:38 +00:00
2015-02-18 20:06:43 +00:00
( read_pred , ) = result
2013-11-13 21:30:38 +00:00
2017-03-02 02:14:56 +00:00
self . assertEqual ( read_pred . GetCount ( HC . CONTENT_STATUS_CURRENT ) , 1 )
2013-11-13 21:30:38 +00:00
self . assertEqual ( pred , read_pred )
#
2016-03-30 22:56:50 +00:00
result = self . _read ( ' autocomplete_predicates ' , tag_service_key = CC . LOCAL_TAG_SERVICE_KEY , search_text = ' c ' , exact_match = True )
2013-11-13 21:30:38 +00:00
2015-02-18 20:06:43 +00:00
self . assertEqual ( result , [ ] )
2013-11-13 21:30:38 +00:00
2013-10-30 22:28:06 +00:00
def test_booru ( self ) :
2015-03-18 21:46:29 +00:00
default_boorus = ClientDefaults . GetDefaultBoorus ( )
for ( name , booru ) in default_boorus . items ( ) :
2013-08-28 21:31:52 +00:00
2014-07-09 22:15:14 +00:00
read_booru = self . _read ( ' remote_booru ' , name )
2013-08-28 21:31:52 +00:00
2013-10-30 22:28:06 +00:00
self . assertEqual ( booru . GetData ( ) , read_booru . GetData ( ) )
2013-08-28 21:31:52 +00:00
2013-10-30 22:28:06 +00:00
#
2014-07-09 22:15:14 +00:00
result = self . _read ( ' remote_boorus ' )
2013-10-30 22:28:06 +00:00
2015-03-18 21:46:29 +00:00
for ( name , booru ) in default_boorus . items ( ) : self . assertEqual ( result [ name ] . GetData ( ) , booru . GetData ( ) )
2013-10-30 22:28:06 +00:00
#
name = ' blah '
search_url = ' url '
search_separator = ' % 20 '
advance_by_page_num = True
thumb_classname = ' thumb '
image_id = None
image_data = ' Download '
tag_classnames_to_namespaces = { ' tag ' : ' ' }
2015-03-18 21:46:29 +00:00
booru = ClientData . Booru ( name , search_url , search_separator , advance_by_page_num , thumb_classname , image_id , image_data , tag_classnames_to_namespaces )
2013-10-30 22:28:06 +00:00
2014-07-09 22:15:14 +00:00
self . _write ( ' remote_booru ' , ' blah ' , booru )
2013-10-30 22:28:06 +00:00
2014-07-09 22:15:14 +00:00
read_booru = self . _read ( ' remote_booru ' , name )
2013-10-30 22:28:06 +00:00
self . assertEqual ( booru . GetData ( ) , read_booru . GetData ( ) )
#
2014-07-09 22:15:14 +00:00
self . _write ( ' delete_remote_booru ' , ' blah ' )
2013-10-30 22:28:06 +00:00
with self . assertRaises ( Exception ) :
2013-08-28 21:31:52 +00:00
2014-07-09 22:15:14 +00:00
read_booru = self . _read ( ' remote_booru ' , name )
2013-08-28 21:31:52 +00:00
2015-06-24 22:10:14 +00:00
def test_export_folders ( self ) :
2016-06-22 20:59:24 +00:00
file_search_context = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , tag_service_key = HydrusData . GenerateKey ( ) , predicates = [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' test ' ) ] )
2015-06-24 22:10:14 +00:00
2017-01-04 22:48:23 +00:00
export_folder = ClientExporting . ExportFolder ( ' test path ' , export_type = HC . EXPORT_FOLDER_TYPE_REGULAR , file_search_context = file_search_context , period = 3600 , phrase = ' {hash} ' )
2015-06-24 22:10:14 +00:00
2015-10-21 21:53:10 +00:00
self . _write ( ' serialisable ' , export_folder )
2015-06-24 22:10:14 +00:00
2015-10-21 21:53:10 +00:00
[ result ] = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_EXPORT_FOLDER )
2015-06-24 22:10:14 +00:00
self . assertEqual ( result . GetName ( ) , export_folder . GetName ( ) )
2013-10-30 22:28:06 +00:00
def test_file_query_ids ( self ) :
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
def run_namespace_predicate_tests ( tests ) :
2015-01-07 23:09:00 +00:00
for ( inclusive , namespace , result ) in tests :
2013-10-30 22:28:06 +00:00
2016-06-22 20:59:24 +00:00
predicates = [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_NAMESPACE , namespace , inclusive ) ]
2013-10-30 22:28:06 +00:00
2015-12-09 23:16:41 +00:00
search_context = ClientSearch . FileSearchContext ( file_service_key = CC . LOCAL_FILE_SERVICE_KEY , predicates = predicates )
2013-10-30 22:28:06 +00:00
file_query_ids = self . _read ( ' file_query_ids ' , search_context )
self . assertEqual ( len ( file_query_ids ) , result )
def run_system_predicate_tests ( tests ) :
2013-10-23 21:36:47 +00:00
for ( predicate_type , info , result ) in tests :
2015-12-09 23:16:41 +00:00
predicates = [ ClientSearch . Predicate ( predicate_type , info ) ]
2013-10-23 21:36:47 +00:00
2015-12-09 23:16:41 +00:00
search_context = ClientSearch . FileSearchContext ( file_service_key = CC . LOCAL_FILE_SERVICE_KEY , predicates = predicates )
2013-10-23 21:36:47 +00:00
2013-10-30 22:28:06 +00:00
file_query_ids = self . _read ( ' file_query_ids ' , search_context )
self . assertEqual ( len ( file_query_ids ) , result )
def run_tag_predicate_tests ( tests ) :
2015-01-07 23:09:00 +00:00
for ( inclusive , tag , result ) in tests :
2013-10-30 22:28:06 +00:00
2016-06-22 20:59:24 +00:00
predicates = [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , tag , inclusive ) ]
2013-10-30 22:28:06 +00:00
2015-12-09 23:16:41 +00:00
search_context = ClientSearch . FileSearchContext ( file_service_key = CC . LOCAL_FILE_SERVICE_KEY , predicates = predicates )
2013-10-30 22:28:06 +00:00
file_query_ids = self . _read ( ' file_query_ids ' , search_context )
2013-10-23 21:36:47 +00:00
self . assertEqual ( len ( file_query_ids ) , result )
tests = [ ]
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_ARCHIVE , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_EVERYTHING , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_INBOX , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LOCAL , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NOT_LOCAL , None , 0 ) )
2013-10-23 21:36:47 +00:00
2013-10-30 22:28:06 +00:00
run_system_predicate_tests ( tests )
2013-10-23 21:36:47 +00:00
#
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' hydrus.png ' )
2013-10-23 21:36:47 +00:00
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
written_result = self . _write ( ' import_file ' , file_import_job )
2016-01-13 22:08:19 +00:00
self . assertEqual ( written_result , CC . STATUS_SUCCESSFUL )
2017-07-19 21:21:41 +00:00
self . assertEqual ( file_import_job . GetHash ( ) , hash )
2013-10-23 21:36:47 +00:00
time . sleep ( 1 )
#
tests = [ ]
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( ' < ' , 1 , 1 , 1 , 1 , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( ' < ' , 0 , 0 , 0 , 0 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( u ' \u2248 ' , 1 , 1 , 1 , 1 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( u ' \u2248 ' , 0 , 0 , 0 , 0 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( ' > ' , 1 , 1 , 1 , 1 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_AGE , ( ' > ' , 0 , 0 , 0 , 0 , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_ARCHIVE , None , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' < ' , 100 , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' < ' , 0 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( u ' \u2248 ' , 100 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( u ' \u2248 ' , 0 , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' = ' , 100 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' = ' , 0 , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' > ' , 100 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_DURATION , ( ' > ' , 0 , ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_EVERYTHING , None , 1 ) )
2017-03-02 02:14:56 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , ( False , HC . CONTENT_STATUS_CURRENT , CC . LOCAL_FILE_SERVICE_KEY ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , ( False , HC . CONTENT_STATUS_PENDING , CC . LOCAL_FILE_SERVICE_KEY ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , ( True , HC . CONTENT_STATUS_CURRENT , CC . LOCAL_FILE_SERVICE_KEY ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , ( True , HC . CONTENT_STATUS_PENDING , CC . LOCAL_FILE_SERVICE_KEY ) , 0 ) )
2015-06-24 22:10:14 +00:00
2015-12-30 23:44:09 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HASH , ( hash , ' sha256 ' ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HASH , ( ( ' 0123456789abcdef ' * 4 ) . decode ( ' hex ' ) , ' sha256 ' ) , 0 ) )
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' < ' , 201 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' < ' , 200 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' < ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( u ' \u2248 ' , 200 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( u ' \u2248 ' , 60 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( u ' \u2248 ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' = ' , 200 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' = ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' > ' , 200 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_HEIGHT , ( ' > ' , 199 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_INBOX , None , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LOCAL , None , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_MIME , HC . IMAGES , 1 ) )
2015-09-09 22:04:39 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_MIME , ( HC . IMAGE_PNG , ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_MIME , ( HC . IMAGE_JPEG , ) , 0 ) )
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_MIME , HC . VIDEO , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NOT_LOCAL , None , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' < ' , 1 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' < ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' = ' , 0 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' = ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' > ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' > ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' < ' , 1 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' < ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( u ' \u2248 ' , 0 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( u ' \u2248 ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' = ' , 0 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' = ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' > ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , ( ' > ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATIO , ( ' = ' , 1 , 1 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATIO , ( ' = ' , 4 , 3 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATIO , ( u ' \u2248 ' , 1 , 1 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATIO , ( u ' \u2248 ' , 200 , 201 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATIO , ( u ' \u2248 ' , 4 , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIMILAR_TO , ( hash , 5 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIMILAR_TO , ( ( ' 0123456789abcdef ' * 4 ) . decode ( ' hex ' ) , 5 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' < ' , 0 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' < ' , 5270 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' < ' , 5271 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' = ' , 5270 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' = ' , 0 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( u ' \u2248 ' , 5270 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( u ' \u2248 ' , 0 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 5270 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 5269 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 0 , HydrusData . ConvertUnitToInt ( ' B ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 0 , HydrusData . ConvertUnitToInt ( ' KB ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 0 , HydrusData . ConvertUnitToInt ( ' MB ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_SIZE , ( ' > ' , 0 , HydrusData . ConvertUnitToInt ( ' GB ' ) ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' < ' , 201 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' < ' , 200 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' < ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( u ' \u2248 ' , 200 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( u ' \u2248 ' , 60 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( u ' \u2248 ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' = ' , 200 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' = ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' > ' , 200 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_WIDTH , ( ' > ' , 199 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LIMIT , 100 , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LIMIT , 1 , 1 ) )
2016-04-06 19:52:45 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LIMIT , 0 , 0 ) )
2013-10-23 21:36:47 +00:00
2013-10-30 22:28:06 +00:00
run_system_predicate_tests ( tests )
2013-10-23 21:36:47 +00:00
#
2014-08-27 22:15:22 +00:00
service_keys_to_content_updates = { }
2013-10-23 21:36:47 +00:00
2016-12-21 22:30:54 +00:00
service_keys_to_content_updates [ CC . COMBINED_LOCAL_FILE_SERVICE_KEY ] = ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_ARCHIVE , ( hash , ) ) , )
2015-10-14 21:02:25 +00:00
service_keys_to_content_updates [ CC . LOCAL_TAG_SERVICE_KEY ] = ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' car ' , ( hash , ) ) ) , )
2013-10-23 21:36:47 +00:00
2014-08-27 22:15:22 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2013-10-23 21:36:47 +00:00
#
tests = [ ]
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_ARCHIVE , None , 1 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_INBOX , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' < ' , 2 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' < ' , 1 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' < ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' = ' , 0 ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' = ' , 1 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' > ' , 0 ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , ( ' > ' , 1 ) , 0 ) )
2013-10-23 21:36:47 +00:00
2013-10-30 22:28:06 +00:00
run_system_predicate_tests ( tests )
#
tests = [ ]
2015-01-07 23:09:00 +00:00
tests . append ( ( True , ' car ' , 1 ) )
tests . append ( ( False , ' car ' , 0 ) )
tests . append ( ( True , ' bus ' , 0 ) )
tests . append ( ( False , ' bus ' , 1 ) )
2013-10-30 22:28:06 +00:00
run_tag_predicate_tests ( tests )
#
tests = [ ]
2015-01-07 23:09:00 +00:00
tests . append ( ( True , ' series ' , 0 ) )
tests . append ( ( False , ' series ' , 1 ) )
2013-10-30 22:28:06 +00:00
run_namespace_predicate_tests ( tests )
#
2014-08-27 22:15:22 +00:00
service_keys_to_content_updates = { }
2013-10-30 22:28:06 +00:00
content_updates = [ ]
2015-10-14 21:02:25 +00:00
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' series:cars ' , ( hash , ) ) ) )
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_ADD , ( ' maker:ford ' , ( hash , ) ) ) )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
service_keys_to_content_updates [ CC . LOCAL_TAG_SERVICE_KEY ] = content_updates
2013-10-30 22:28:06 +00:00
2014-08-27 22:15:22 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2013-10-30 22:28:06 +00:00
#
tests = [ ]
2015-01-07 23:09:00 +00:00
tests . append ( ( True , ' maker:ford ' , 1 ) )
tests . append ( ( True , ' ford ' , 1 ) )
tests . append ( ( False , ' maker:ford ' , 0 ) )
tests . append ( ( False , ' ford ' , 0 ) )
2013-10-30 22:28:06 +00:00
run_tag_predicate_tests ( tests )
#
tests = [ ]
2015-01-07 23:09:00 +00:00
tests . append ( ( True , ' series ' , 1 ) )
tests . append ( ( False , ' series ' , 0 ) )
2013-10-30 22:28:06 +00:00
run_namespace_predicate_tests ( tests )
2013-10-23 21:36:47 +00:00
#
2017-04-05 21:16:40 +00:00
like_rating_service_key = HydrusData . GenerateKey ( )
numerical_rating_service_key = HydrusData . GenerateKey ( )
services = self . _read ( ' services ' )
services . append ( ClientServices . GenerateService ( like_rating_service_key , HC . LOCAL_RATING_LIKE , ' test like rating service ' ) )
services . append ( ClientServices . GenerateService ( numerical_rating_service_key , HC . LOCAL_RATING_NUMERICAL , ' test numerical rating service ' ) )
self . _write ( ' update_services ' , services )
service_keys_to_content_updates = { }
content_updates = [ ]
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 1.0 , ( hash , ) ) ) )
service_keys_to_content_updates [ like_rating_service_key ] = content_updates
self . _write ( ' content_updates ' , service_keys_to_content_updates )
service_keys_to_content_updates = { }
content_updates = [ ]
content_updates . append ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_RATINGS , HC . CONTENT_UPDATE_ADD , ( 0.6 , ( hash , ) ) ) )
service_keys_to_content_updates [ numerical_rating_service_key ] = content_updates
self . _write ( ' content_updates ' , service_keys_to_content_updates )
tests = [ ]
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , 1.0 , like_rating_service_key ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , 0.0 , like_rating_service_key ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , ' rated ' , like_rating_service_key ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , ' not rated ' , like_rating_service_key ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , 0.6 , numerical_rating_service_key ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , 1.0 , numerical_rating_service_key ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' > ' , 0.6 , numerical_rating_service_key ) , 0 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' > ' , 0.4 , numerical_rating_service_key ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , ' rated ' , numerical_rating_service_key ) , 1 ) )
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' = ' , ' not rated ' , numerical_rating_service_key ) , 0 ) )
run_system_predicate_tests ( tests )
#
2015-10-14 21:02:25 +00:00
content_update = HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , ( hash , ) )
2013-10-23 21:36:47 +00:00
2015-03-25 22:04:19 +00:00
service_keys_to_content_updates = { CC . LOCAL_FILE_SERVICE_KEY : ( content_update , ) }
2013-10-23 21:36:47 +00:00
2014-08-27 22:15:22 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2013-10-23 21:36:47 +00:00
#
tests = [ ]
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_ARCHIVE , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_EVERYTHING , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_INBOX , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_LOCAL , None , 0 ) )
2013-10-23 21:36:47 +00:00
2015-06-24 22:10:14 +00:00
tests . append ( ( HC . PREDICATE_TYPE_SYSTEM_NOT_LOCAL , None , 0 ) )
2013-10-23 21:36:47 +00:00
2013-10-30 22:28:06 +00:00
run_system_predicate_tests ( tests )
def test_file_system_predicates ( self ) :
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' hydrus.png ' )
2013-10-30 22:28:06 +00:00
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
self . _write ( ' import_file ' , file_import_job )
2013-10-30 22:28:06 +00:00
#
2015-03-25 22:04:19 +00:00
result = self . _read ( ' file_system_predicates ' , CC . LOCAL_FILE_SERVICE_KEY )
2013-10-30 22:28:06 +00:00
predicates = [ ]
2016-06-22 20:59:24 +00:00
predicates . append ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_SYSTEM_EVERYTHING , min_current_count = 1 ) )
predicates . append ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_SYSTEM_INBOX , min_current_count = 1 ) )
predicates . append ( ClientSearch . Predicate ( HC . PREDICATE_TYPE_SYSTEM_ARCHIVE , min_current_count = 0 ) )
2017-06-21 21:15:59 +00:00
predicates . extend ( [ ClientSearch . Predicate ( predicate_type ) for predicate_type in [ HC . PREDICATE_TYPE_SYSTEM_UNTAGGED , HC . PREDICATE_TYPE_SYSTEM_NUM_TAGS , HC . PREDICATE_TYPE_SYSTEM_LIMIT , HC . PREDICATE_TYPE_SYSTEM_SIZE , HC . PREDICATE_TYPE_SYSTEM_AGE , HC . PREDICATE_TYPE_SYSTEM_HASH , HC . PREDICATE_TYPE_SYSTEM_DIMENSIONS , HC . PREDICATE_TYPE_SYSTEM_DURATION , HC . PREDICATE_TYPE_SYSTEM_NUM_WORDS , HC . PREDICATE_TYPE_SYSTEM_MIME , HC . PREDICATE_TYPE_SYSTEM_SIMILAR_TO , HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , HC . PREDICATE_TYPE_SYSTEM_TAG_AS_NUMBER , HC . PREDICATE_TYPE_SYSTEM_DUPLICATE_RELATIONSHIPS ] ] )
2016-01-06 21:17:20 +00:00
2013-10-30 22:28:06 +00:00
self . assertEqual ( result , predicates )
for i in range ( len ( predicates ) ) : self . assertEqual ( result [ i ] . GetCount ( ) , predicates [ i ] . GetCount ( ) )
2014-04-16 20:31:59 +00:00
def test_gui_sessions ( self ) :
2015-06-24 22:10:14 +00:00
session = ClientGUIPages . GUISession ( ' test_session ' )
2015-10-07 21:56:22 +00:00
gallery_identifier = ClientDownloading . GalleryIdentifier ( HC . SITE_TYPE_HENTAI_FOUNDRY_ARTIST )
management_controller = ClientGUIManagement . CreateManagementControllerImportGallery ( gallery_identifier )
2015-06-24 22:10:14 +00:00
session . AddPage ( ' hf download page ' , management_controller , [ ] )
2015-07-01 22:02:07 +00:00
service_keys_to_tags = { HydrusData . GenerateKey ( ) : [ ' some ' , ' tags ' ] }
2015-06-24 22:10:14 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerImportHDD ( [ ' some ' , ' paths ' ] , ClientData . ImportFileOptions ( ) , { ' paths ' : service_keys_to_tags } , True )
session . AddPage ( ' hdd download page ' , management_controller , [ ] )
management_controller = ClientGUIManagement . CreateManagementControllerImportThreadWatcher ( )
session . AddPage ( ' thread watcher ' , management_controller , [ ] )
2015-08-19 21:48:21 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerImportPageOfImages ( )
2015-06-24 22:10:14 +00:00
session . AddPage ( ' url download page ' , management_controller , [ ] )
management_controller = ClientGUIManagement . CreateManagementControllerPetitions ( CC . LOCAL_TAG_SERVICE_KEY ) # local because the controller wants to look up the service
session . AddPage ( ' petition page ' , management_controller , [ ] )
2014-04-16 20:31:59 +00:00
2015-12-09 23:16:41 +00:00
fsc = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , predicates = [ ] )
2014-04-16 20:31:59 +00:00
2015-07-01 22:02:07 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerQuery ( HydrusData . GenerateKey ( ) , fsc , True )
2014-04-16 20:31:59 +00:00
2015-06-24 22:10:14 +00:00
session . AddPage ( ' files ' , management_controller , [ ] )
2015-12-09 23:16:41 +00:00
fsc = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , tag_service_key = HydrusData . GenerateKey ( ) , predicates = [ ] )
2015-06-24 22:10:14 +00:00
2015-07-01 22:02:07 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerQuery ( HydrusData . GenerateKey ( ) , fsc , False )
2015-06-24 22:10:14 +00:00
2015-07-01 22:02:07 +00:00
session . AddPage ( ' files ' , management_controller , [ HydrusData . GenerateKey ( ) for i in range ( 200 ) ] )
2015-06-24 22:10:14 +00:00
2015-12-09 23:16:41 +00:00
fsc = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , predicates = [ ClientSearch . SYSTEM_PREDICATE_ARCHIVE ] )
2015-06-24 22:10:14 +00:00
2015-07-01 22:02:07 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerQuery ( HydrusData . GenerateKey ( ) , fsc , True )
2015-06-24 22:10:14 +00:00
session . AddPage ( ' files ' , management_controller , [ ] )
2016-06-22 20:59:24 +00:00
fsc = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , predicates = [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_TAG , ' tag ' , min_current_count = 1 , min_pending_count = 3 ) ] )
2015-06-24 22:10:14 +00:00
2015-07-01 22:02:07 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerQuery ( HydrusData . GenerateKey ( ) , fsc , True )
2015-06-24 22:10:14 +00:00
session . AddPage ( ' files ' , management_controller , [ ] )
2017-03-02 02:14:56 +00:00
fsc = ClientSearch . FileSearchContext ( file_service_key = HydrusData . GenerateKey ( ) , predicates = [ ClientSearch . Predicate ( HC . PREDICATE_TYPE_SYSTEM_RATING , ( ' > ' , 0.2 , HydrusData . GenerateKey ( ) ) ) , ClientSearch . Predicate ( HC . PREDICATE_TYPE_SYSTEM_FILE_SERVICE , ( True , HC . CONTENT_STATUS_CURRENT , HydrusData . GenerateKey ( ) ) ) ] )
2015-06-24 22:10:14 +00:00
2015-07-01 22:02:07 +00:00
management_controller = ClientGUIManagement . CreateManagementControllerQuery ( HydrusData . GenerateKey ( ) , fsc , True )
2015-06-24 22:10:14 +00:00
session . AddPage ( ' files ' , management_controller , [ ] )
2015-10-21 21:53:10 +00:00
self . _write ( ' serialisable ' , session )
2015-06-24 22:10:14 +00:00
2015-10-21 21:53:10 +00:00
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_GUI_SESSION , ' test_session ' )
2015-06-24 22:10:14 +00:00
page_names = [ ]
for ( page_name , management_controller , initial_hashes ) in result . IteratePages ( ) :
page_names . append ( page_name )
2014-04-16 20:31:59 +00:00
2015-06-24 22:10:14 +00:00
self . assertEqual ( page_names , [ ' hf download page ' , ' hdd download page ' , ' thread watcher ' , ' url download page ' , ' petition page ' , ' files ' , ' files ' , ' files ' , ' files ' , ' files ' ] )
2014-04-16 20:31:59 +00:00
2013-10-30 22:28:06 +00:00
def test_import ( self ) :
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
2015-10-21 21:53:10 +00:00
test_files = [ ]
2015-10-07 21:56:22 +00:00
2015-10-21 21:53:10 +00:00
test_files . append ( ( ' muh_swf.swf ' , ' edfef9905fdecde38e0752a5b6ab7b6df887c3968d4246adc9cffc997e168cdf ' , 456774 , HC . APPLICATION_FLASH , 400 , 400 , 33 , 1 , None ) )
2016-05-25 21:54:03 +00:00
test_files . append ( ( ' muh_mp4.mp4 ' , ' 2fa293907144a046d043d74e9570b1c792cbfd77ee3f5c93b2b1a1cb3e4c7383 ' , 570534 , HC . VIDEO_MP4 , 480 , 480 , ' mp4_duration ' , 151 , None ) )
2017-06-14 21:19:11 +00:00
test_files . append ( ( ' muh_mpeg.mpeg ' , ' aebb10aaf3b27a5878fd2732ea28aaef7bbecef7449eaa759421c4ba4efff494 ' , 772096 , HC . VIDEO_MPEG , 720 , 480 , 2966 , 105 , None ) )
test_files . append ( ( ' muh_webm.webm ' , ' 55b6ce9d067326bf4b2fbe66b8f51f366bc6e5f776ba691b0351364383c43fcb ' , 84069 , HC . VIDEO_WEBM , 640 , 360 , 4010 , 120 , None ) )
2015-10-21 21:53:10 +00:00
test_files . append ( ( ' muh_jpg.jpg ' , ' 5d884d84813beeebd59a35e474fa3e4742d0f2b6679faa7609b245ddbbd05444 ' , 42296 , HC . IMAGE_JPEG , 392 , 498 , None , None , None ) )
test_files . append ( ( ' muh_png.png ' , ' cdc67d3b377e6e1397ffa55edc5b50f6bdf4482c7a6102c6f27fa351429d6f49 ' , 31452 , HC . IMAGE_PNG , 191 , 196 , None , None , None ) )
2017-07-05 21:09:28 +00:00
if ' 3.2.4 ' in HydrusVideoHandling . GetFFMPEGVersion ( ) :
apng_duration = 3133
else :
apng_duration = 1880
test_files . append ( ( ' muh_apng.png ' , ' 9e7b8b5abc7cb11da32db05671ce926a2a2b701415d1b2cb77a28deea51010c3 ' , 616956 , HC . IMAGE_APNG , 500 , 500 , apng_duration , 47 , None ) )
2015-10-21 21:53:10 +00:00
test_files . append ( ( ' muh_gif.gif ' , ' 00dd9e9611ebc929bfc78fde99a0c92800bbb09b9d18e0946cea94c099b211c2 ' , 15660 , HC . IMAGE_GIF , 329 , 302 , 600 , 5 , None ) )
2013-10-30 22:28:06 +00:00
2015-10-21 21:53:10 +00:00
for ( filename , hex_hash , size , mime , width , height , duration , num_frames , num_words ) in test_files :
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' testing ' , filename )
2015-10-21 21:53:10 +00:00
hash = hex_hash . decode ( ' hex ' )
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
written_result = self . _write ( ' import_file ' , file_import_job )
2015-10-21 21:53:10 +00:00
self . assertEqual ( written_result , CC . STATUS_SUCCESSFUL )
2017-07-19 21:21:41 +00:00
self . assertEqual ( file_import_job . GetHash ( ) , hash )
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
2015-10-21 21:53:10 +00:00
2017-07-19 21:21:41 +00:00
file_import_job . GenerateInfo ( )
written_result = self . _write ( ' import_file ' , file_import_job )
2015-10-21 21:53:10 +00:00
self . assertEqual ( written_result , CC . STATUS_REDUNDANT )
2017-07-19 21:21:41 +00:00
self . assertEqual ( file_import_job . GetHash ( ) , hash )
written_hash = file_import_job . GetHash ( )
2015-10-21 21:53:10 +00:00
2016-05-04 21:50:55 +00:00
( media_result , ) = self . _read ( ' media_results ' , ( written_hash , ) )
2015-10-21 21:53:10 +00:00
2017-05-31 21:50:53 +00:00
( mr_file_info_manager , mr_tags_manager , mr_locations_manager , mr_ratings_manager ) = media_result . ToTuple ( )
( mr_hash , mr_size , mr_mime , mr_width , mr_height , mr_duration , mr_num_frames , mr_num_words ) = mr_file_info_manager . ToTuple ( )
mr_inbox = mr_locations_manager . GetInbox ( )
2015-10-21 21:53:10 +00:00
now = HydrusData . GetNow ( )
self . assertEqual ( mr_hash , hash )
self . assertEqual ( mr_inbox , True )
self . assertEqual ( mr_size , size )
self . assertEqual ( mr_mime , mime )
self . assertEqual ( mr_width , width )
self . assertEqual ( mr_height , height )
2016-05-25 21:54:03 +00:00
if duration == ' mp4_duration ' : # diff ffmpeg versions report differently
self . assertIn ( mr_duration , ( 6266 , 6290 ) )
else :
self . assertEqual ( mr_duration , duration )
2015-10-21 21:53:10 +00:00
self . assertEqual ( mr_num_frames , num_frames )
self . assertEqual ( mr_num_words , num_words )
2013-10-30 22:28:06 +00:00
def test_import_folders ( self ) :
2016-10-12 21:52:50 +00:00
import_folder_1 = ClientImporting . ImportFolder ( ' imp 1 ' , path = TestConstants . DB_DIR , mimes = HC . VIDEO , open_popup = False )
import_folder_2 = ClientImporting . ImportFolder ( ' imp 2 ' , path = TestConstants . DB_DIR , mimes = HC . IMAGES , period = 1200 , open_popup = False )
2013-10-30 22:28:06 +00:00
#
2015-10-21 21:53:10 +00:00
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_IMPORT_FOLDER )
2013-10-30 22:28:06 +00:00
2015-09-09 22:04:39 +00:00
self . assertEqual ( result , [ ] )
2013-10-30 22:28:06 +00:00
#
2015-10-21 21:53:10 +00:00
self . _write ( ' serialisable ' , import_folder_1 )
self . _write ( ' serialisable ' , import_folder_2 )
2014-02-12 23:09:38 +00:00
2015-10-21 21:53:10 +00:00
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_IMPORT_FOLDER )
2014-02-12 23:09:38 +00:00
2015-09-09 22:04:39 +00:00
for item in result :
self . assertEqual ( type ( item ) , ClientImporting . ImportFolder )
2013-10-30 22:28:06 +00:00
#
2015-10-21 21:53:10 +00:00
self . _write ( ' delete_serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_IMPORT_FOLDER , ' imp 2 ' )
2014-02-12 23:09:38 +00:00
2015-10-21 21:53:10 +00:00
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_IMPORT_FOLDER )
2013-10-30 22:28:06 +00:00
2015-09-09 22:04:39 +00:00
( item , ) = result
2013-10-30 22:28:06 +00:00
2015-09-09 22:04:39 +00:00
self . assertEqual ( item . GetName ( ) , ' imp 1 ' )
2013-10-30 22:28:06 +00:00
def test_init ( self ) :
2016-10-12 21:52:50 +00:00
self . assertTrue ( os . path . exists ( TestConstants . DB_DIR ) )
2013-10-30 22:28:06 +00:00
2016-10-12 21:52:50 +00:00
self . assertTrue ( os . path . exists ( os . path . join ( TestConstants . DB_DIR , ' client.db ' ) ) )
2013-10-30 22:28:06 +00:00
2016-10-12 21:52:50 +00:00
client_files_default = os . path . join ( TestConstants . DB_DIR , ' client_files ' )
2016-06-01 20:04:15 +00:00
self . assertTrue ( os . path . exists ( client_files_default ) )
2013-10-30 22:28:06 +00:00
2015-12-02 22:32:18 +00:00
for prefix in HydrusData . IterateHexPrefixes ( ) :
2013-10-30 22:28:06 +00:00
2016-07-27 21:53:34 +00:00
for c in ( ' f ' , ' t ' , ' r ' ) :
dir = os . path . join ( client_files_default , c + prefix )
self . assertTrue ( os . path . exists ( dir ) )
2013-10-30 22:28:06 +00:00
def test_md5_status ( self ) :
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
md5 = ' fdadb2cae78f2dfeb629449cd005f2a2 ' . decode ( ' hex ' )
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' hydrus.png ' )
2013-10-30 22:28:06 +00:00
#
result = self . _read ( ' md5_status ' , md5 )
2015-06-03 21:05:13 +00:00
self . assertEqual ( result , ( CC . STATUS_NEW , None ) )
2013-10-30 22:28:06 +00:00
#
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
self . _write ( ' import_file ' , file_import_job )
2013-10-30 22:28:06 +00:00
#
result = self . _read ( ' md5_status ' , md5 )
2015-06-03 21:05:13 +00:00
self . assertEqual ( result , ( CC . STATUS_REDUNDANT , hash ) )
2013-10-30 22:28:06 +00:00
#
2015-10-14 21:02:25 +00:00
content_update = HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_DELETE , ( hash , ) )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
service_keys_to_content_updates = { CC . LOCAL_FILE_SERVICE_KEY : ( content_update , ) }
2013-10-30 22:28:06 +00:00
2014-08-27 22:15:22 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2013-10-30 22:28:06 +00:00
#
HC . options [ ' exclude_deleted_files ' ] = True
result = self . _read ( ' md5_status ' , md5 )
2017-05-17 21:53:02 +00:00
self . assertEqual ( result , ( CC . STATUS_DELETED , hash ) )
2013-10-30 22:28:06 +00:00
def test_media_results ( self ) :
2017-04-05 21:16:40 +00:00
TestClientDB . _clear_db ( )
2013-10-30 22:28:06 +00:00
2015-11-04 22:30:28 +00:00
path = os . path . join ( HC . STATIC_DIR , ' hydrus.png ' )
2013-10-30 22:28:06 +00:00
2015-10-07 21:56:22 +00:00
HC . options [ ' exclude_deleted_files ' ] = False
2017-07-19 21:21:41 +00:00
file_import_job = ClientImporting . FileImportJob ( path )
file_import_job . GenerateHashAndStatus ( )
file_import_job . GenerateInfo ( )
self . _write ( ' import_file ' , file_import_job )
hash = file_import_job . GetHash ( )
2013-10-30 22:28:06 +00:00
#
2016-05-04 21:50:55 +00:00
( media_result , ) = self . _read ( ' media_results ' , ( hash , ) )
2013-10-30 22:28:06 +00:00
2017-05-31 21:50:53 +00:00
( mr_file_info_manager , mr_tags_manager , mr_locations_manager , mr_ratings_manager ) = media_result . ToTuple ( )
( mr_hash , mr_size , mr_mime , mr_width , mr_height , mr_duration , mr_num_frames , mr_num_words ) = mr_file_info_manager . ToTuple ( )
mr_inbox = mr_locations_manager . GetInbox ( )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
now = HydrusData . GetNow ( )
2013-10-30 22:28:06 +00:00
self . assertEqual ( mr_hash , hash )
self . assertEqual ( mr_inbox , True )
self . assertEqual ( mr_size , 5270 )
self . assertEqual ( mr_mime , HC . IMAGE_PNG )
self . assertEqual ( mr_hash , hash )
self . assertEqual ( mr_width , 200 )
self . assertEqual ( mr_height , 200 )
self . assertEqual ( mr_duration , None )
self . assertEqual ( mr_num_frames , None )
self . assertEqual ( mr_num_words , None )
2016-05-04 21:50:55 +00:00
( media_result , ) = self . _read ( ' media_results_from_ids ' , ( 1 , ) )
2013-10-30 22:28:06 +00:00
2017-05-31 21:50:53 +00:00
( mr_file_info_manager , mr_tags_manager , mr_locations_manager , mr_ratings_manager ) = media_result . ToTuple ( )
( mr_hash , mr_size , mr_mime , mr_width , mr_height , mr_duration , mr_num_frames , mr_num_words ) = mr_file_info_manager . ToTuple ( )
mr_inbox = mr_locations_manager . GetInbox ( )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
now = HydrusData . GetNow ( )
2013-10-30 22:28:06 +00:00
self . assertEqual ( mr_hash , hash )
self . assertEqual ( mr_inbox , True )
self . assertEqual ( mr_size , 5270 )
self . assertEqual ( mr_mime , HC . IMAGE_PNG )
self . assertEqual ( mr_hash , hash )
self . assertEqual ( mr_width , 200 )
self . assertEqual ( mr_height , 200 )
self . assertEqual ( mr_duration , None )
self . assertEqual ( mr_num_frames , None )
self . assertEqual ( mr_num_words , None )
2014-03-12 22:08:23 +00:00
def test_tag_censorship ( self ) :
2013-10-30 22:28:06 +00:00
2014-03-12 22:08:23 +00:00
result = self . _read ( ' tag_censorship ' )
2013-10-30 22:28:06 +00:00
self . assertEqual ( result , [ ] )
2015-03-25 22:04:19 +00:00
result = self . _read ( ' tag_censorship ' , CC . LOCAL_TAG_SERVICE_KEY )
2013-10-30 22:28:06 +00:00
self . assertEqual ( result , ( True , [ ] ) )
#
2014-03-12 22:08:23 +00:00
info = [ ]
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
info . append ( ( CC . LOCAL_TAG_SERVICE_KEY , False , [ ' : ' , ' series: ' ] ) )
info . append ( ( CC . LOCAL_FILE_SERVICE_KEY , True , [ ' : ' ] ) ) # bit dodgy, but whatever!
2013-10-30 22:28:06 +00:00
2014-03-12 22:08:23 +00:00
self . _write ( ' tag_censorship ' , info )
2013-10-30 22:28:06 +00:00
#
2014-03-12 22:08:23 +00:00
result = self . _read ( ' tag_censorship ' )
2013-10-30 22:28:06 +00:00
2014-03-12 22:08:23 +00:00
self . assertItemsEqual ( result , info )
2013-10-30 22:28:06 +00:00
2015-03-25 22:04:19 +00:00
result = self . _read ( ' tag_censorship ' , CC . LOCAL_TAG_SERVICE_KEY )
2013-10-30 22:28:06 +00:00
2014-03-12 22:08:23 +00:00
self . assertEqual ( result , ( False , [ ' : ' , ' series: ' ] ) )
2013-10-30 22:28:06 +00:00
def test_nums_pending ( self ) :
result = self . _read ( ' nums_pending ' )
self . assertEqual ( result , { } )
# we can do more testing when I add repo service to this testing framework
def test_pending ( self ) :
2015-07-15 20:28:26 +00:00
service_key = HydrusData . GenerateKey ( )
info = { }
info [ ' host ' ] = ' example_host '
info [ ' port ' ] = 80
info [ ' access_key ' ] = HydrusData . GenerateKey ( )
new_tag_repo = ( service_key , HC . TAG_REPOSITORY , ' new tag repo ' , info )
edit_log = [ HydrusData . EditLogActionAdd ( new_tag_repo ) ]
self . _write ( ' update_services ' , edit_log )
#
hashes = [ os . urandom ( 32 ) for i in range ( 64 ) ]
tags = [ ' this ' , ' is ' , ' a:test ' ]
2015-10-14 21:02:25 +00:00
content_updates = [ HydrusData . ContentUpdate ( HC . CONTENT_TYPE_MAPPINGS , HC . CONTENT_UPDATE_PEND , ( tag , hashes ) ) for tag in tags ]
2015-07-15 20:28:26 +00:00
service_keys_to_content_updates = { service_key : content_updates }
self . _write ( ' content_updates ' , service_keys_to_content_updates )
2015-12-30 23:44:09 +00:00
result = self . _read ( ' pending ' , service_key )
2015-07-15 20:28:26 +00:00
2017-03-08 23:23:12 +00:00
self . assertIsInstance ( result , HydrusNetwork . ClientToServerUpdate )
self . assertTrue ( result . HasContent ( ) )
self . assertEqual ( set ( result . GetHashes ( ) ) , set ( hashes ) )
2015-07-15 20:28:26 +00:00
#
edit_log = [ HydrusData . EditLogActionDelete ( service_key ) ]
2013-10-30 22:28:06 +00:00
2015-07-15 20:28:26 +00:00
self . _write ( ' update_services ' , edit_log )
2013-10-30 22:28:06 +00:00
def test_pixiv_account ( self ) :
2016-04-06 19:52:45 +00:00
result = self . _read ( ' serialisable_simple ' , ' pixiv_account ' )
2013-10-30 22:28:06 +00:00
2016-04-06 19:52:45 +00:00
self . assertEqual ( result , None )
2013-10-30 22:28:06 +00:00
pixiv_id = 123456
password = ' password '
2016-04-06 19:52:45 +00:00
self . _write ( ' serialisable_simple ' , ' pixiv_account ' , ( pixiv_id , password ) )
2013-10-30 22:28:06 +00:00
2016-04-06 19:52:45 +00:00
result = self . _read ( ' serialisable_simple ' , ' pixiv_account ' )
2013-10-30 22:28:06 +00:00
self . assertTrue ( result , ( pixiv_id , password ) )
2015-10-21 21:53:10 +00:00
def test_repo_downloads ( self ) :
result = self . _read ( ' downloads ' )
self . assertEqual ( result , set ( ) )
#
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
service_keys_to_content_updates = { }
2016-12-21 22:30:54 +00:00
service_keys_to_content_updates [ CC . COMBINED_LOCAL_FILE_SERVICE_KEY ] = ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_PEND , ( hash , ) ) , )
2015-10-21 21:53:10 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
#
result = self . _read ( ' downloads ' )
self . assertEqual ( result , { hash } )
#
hash = ' \xad m5 \x99 \xa6 \xc4 \x89 \xa5 u \xeb \x19 \xc0 & \xfa \xce \x97 \xa9 \xcd ey \xe7 G( \xb0 \xce \x94 \xa6 \x01 \xd2 2 \xf3 \xc3 '
service_keys_to_content_updates = { }
2016-12-21 22:30:54 +00:00
service_keys_to_content_updates [ CC . COMBINED_LOCAL_FILE_SERVICE_KEY ] = ( HydrusData . ContentUpdate ( HC . CONTENT_TYPE_FILES , HC . CONTENT_UPDATE_RESCIND_PEND , ( hash , ) ) , )
2015-10-21 21:53:10 +00:00
self . _write ( ' content_updates ' , service_keys_to_content_updates )
#
result = self . _read ( ' downloads ' )
self . assertEqual ( result , set ( ) )
2013-08-28 21:31:52 +00:00
def test_services ( self ) :
2016-12-21 22:30:54 +00:00
result = self . _read ( ' services ' , ( HC . LOCAL_FILE_DOMAIN , HC . LOCAL_FILE_TRASH_DOMAIN , HC . COMBINED_LOCAL_FILE , HC . LOCAL_TAG ) )
2013-10-30 22:28:06 +00:00
2014-09-17 21:28:26 +00:00
result_service_keys = { service . GetServiceKey ( ) for service in result }
2013-10-30 22:28:06 +00:00
2017-03-08 23:23:12 +00:00
self . assertItemsEqual ( { CC . TRASH_SERVICE_KEY , CC . LOCAL_FILE_SERVICE_KEY , CC . LOCAL_UPDATE_SERVICE_KEY , CC . COMBINED_LOCAL_FILE_SERVICE_KEY , CC . LOCAL_TAG_SERVICE_KEY } , result_service_keys )
2013-10-30 22:28:06 +00:00
#
2015-03-25 22:04:19 +00:00
result = self . _read ( ' service_info ' , CC . LOCAL_FILE_SERVICE_KEY )
2013-10-30 22:28:06 +00:00
self . assertEqual ( type ( result ) , dict )
for ( k , v ) in result . items ( ) :
self . assertEqual ( type ( k ) , int )
self . assertEqual ( type ( v ) , int )
2013-08-28 21:31:52 +00:00
#
2014-08-27 22:15:22 +00:00
def test_written_services ( written_services , service_tuples ) :
self . assertEqual ( len ( written_services ) , len ( service_tuples ) )
keys_to_service_tuples = { service_key : ( service_type , name , info ) for ( service_key , service_type , name , info ) in service_tuples }
for service in written_services :
2014-09-17 21:28:26 +00:00
service_key = service . GetServiceKey ( )
2014-08-27 22:15:22 +00:00
self . assertIn ( service_key , keys_to_service_tuples )
( service_type , name , info ) = keys_to_service_tuples [ service_key ]
2014-09-17 21:28:26 +00:00
self . assertEqual ( service_type , service . GetServiceType ( ) )
2014-08-27 22:15:22 +00:00
self . assertEqual ( name , service . GetName ( ) )
for ( k , v ) in service . GetInfo ( ) . items ( ) :
if k != ' account ' : self . assertEqual ( v , info [ k ] )
info = { }
2013-12-11 22:09:25 +00:00
2014-08-27 22:15:22 +00:00
info [ ' host ' ] = ' example_host '
info [ ' port ' ] = 80
2015-07-01 22:02:07 +00:00
info [ ' access_key ' ] = HydrusData . GenerateKey ( )
2013-12-11 22:09:25 +00:00
2015-07-01 22:02:07 +00:00
new_tag_repo = ( HydrusData . GenerateKey ( ) , HC . TAG_REPOSITORY , ' new tag repo ' , info )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
info = { }
2013-12-11 22:09:25 +00:00
2014-08-27 22:15:22 +00:00
info [ ' host ' ] = ' example_host2 '
info [ ' port ' ] = 80
2015-07-01 22:02:07 +00:00
info [ ' access_key ' ] = HydrusData . GenerateKey ( )
2013-12-11 22:09:25 +00:00
2015-07-01 22:02:07 +00:00
other_new_tag_repo = ( HydrusData . GenerateKey ( ) , HC . TAG_REPOSITORY , ' new tag repo2 ' , info )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
info = { }
2013-12-11 22:09:25 +00:00
2015-05-20 21:31:40 +00:00
info [ ' shape ' ] = ClientRatings . CIRCLE
info [ ' colours ' ] = ClientRatings . default_like_colours
2013-12-11 22:09:25 +00:00
2015-07-01 22:02:07 +00:00
new_local_like = ( HydrusData . GenerateKey ( ) , HC . LOCAL_RATING_LIKE , ' new local rating ' , info )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
info = { }
2013-12-11 22:09:25 +00:00
2015-05-20 21:31:40 +00:00
info [ ' shape ' ] = ClientRatings . CIRCLE
info [ ' colours ' ] = ClientRatings . default_numerical_colours
info [ ' num_stars ' ] = 5
2013-12-11 22:09:25 +00:00
2015-07-01 22:02:07 +00:00
new_local_numerical = ( HydrusData . GenerateKey ( ) , HC . LOCAL_RATING_NUMERICAL , ' new local numerical ' , info )
2013-08-28 21:31:52 +00:00
edit_log = [ ]
2015-03-25 22:04:19 +00:00
edit_log . append ( HydrusData . EditLogActionAdd ( new_tag_repo ) )
edit_log . append ( HydrusData . EditLogActionAdd ( other_new_tag_repo ) )
edit_log . append ( HydrusData . EditLogActionAdd ( new_local_like ) )
edit_log . append ( HydrusData . EditLogActionAdd ( new_local_numerical ) )
2013-08-28 21:31:52 +00:00
2013-10-30 22:28:06 +00:00
self . _write ( ' update_services ' , edit_log )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
written_services = set ( self . _read ( ' services ' , ( HC . TAG_REPOSITORY , HC . LOCAL_RATING_LIKE , HC . LOCAL_RATING_NUMERICAL ) ) )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
test_written_services ( written_services , ( new_tag_repo , other_new_tag_repo , new_local_like , new_local_numerical ) )
2013-08-28 21:31:52 +00:00
#
2014-08-27 22:15:22 +00:00
( service_key , service_type , name , info ) = other_new_tag_repo
name = ' a better name '
2013-12-11 22:09:25 +00:00
2014-08-27 22:15:22 +00:00
info = dict ( info )
2013-12-11 22:09:25 +00:00
2014-08-27 22:15:22 +00:00
info [ ' host ' ] = ' corrected host '
info [ ' port ' ] = 85
2015-07-01 22:02:07 +00:00
info [ ' access_key ' ] = HydrusData . GenerateKey ( )
2014-08-27 22:15:22 +00:00
other_new_tag_repo_updated = ( service_key , service_type , name , info )
2013-08-28 21:31:52 +00:00
edit_log = [ ]
2015-03-25 22:04:19 +00:00
edit_log . append ( HydrusData . EditLogActionDelete ( new_local_like [ 0 ] ) )
edit_log . append ( HydrusData . EditLogActionEdit ( other_new_tag_repo_updated [ 0 ] , other_new_tag_repo_updated ) )
2013-08-28 21:31:52 +00:00
2013-10-30 22:28:06 +00:00
self . _write ( ' update_services ' , edit_log )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
written_services = set ( self . _read ( ' services ' , ( HC . TAG_REPOSITORY , HC . LOCAL_RATING_LIKE , HC . LOCAL_RATING_NUMERICAL ) ) )
test_written_services ( written_services , ( new_tag_repo , other_new_tag_repo_updated , new_local_numerical ) )
2013-08-28 21:31:52 +00:00
#
2014-04-23 20:56:12 +00:00
edit_log = [ ]
2015-03-25 22:04:19 +00:00
edit_log . append ( HydrusData . EditLogActionDelete ( other_new_tag_repo_updated [ 0 ] ) )
2013-08-28 21:31:52 +00:00
2014-04-23 20:56:12 +00:00
self . _write ( ' update_services ' , edit_log )
2014-08-27 22:15:22 +00:00
written_services = set ( self . _read ( ' services ' , ( HC . TAG_REPOSITORY , HC . LOCAL_RATING_LIKE , HC . LOCAL_RATING_NUMERICAL ) ) )
2013-08-28 21:31:52 +00:00
2014-08-27 22:15:22 +00:00
test_written_services ( written_services , ( new_tag_repo , new_local_numerical ) )
2013-08-28 21:31:52 +00:00
2013-10-30 22:28:06 +00:00
def test_sessions ( self ) :
result = self . _read ( ' hydrus_sessions ' )
self . assertEqual ( result , [ ] )
2015-07-01 22:02:07 +00:00
session = ( CC . LOCAL_FILE_SERVICE_KEY , HydrusData . GenerateKey ( ) , HydrusData . GetNow ( ) + 100000 )
2013-10-30 22:28:06 +00:00
self . _write ( ' hydrus_session ' , * session )
result = self . _read ( ' hydrus_sessions ' )
self . assertEqual ( result , [ session ] )
#
result = self . _read ( ' web_sessions ' )
self . assertEqual ( result , [ ] )
2015-03-25 22:04:19 +00:00
session = ( ' website name ' , [ ' cookie 1 ' , ' cookie 2 ' ] , HydrusData . GetNow ( ) + 100000 )
2013-10-30 22:28:06 +00:00
self . _write ( ' web_session ' , * session )
result = self . _read ( ' web_sessions ' )
self . assertEqual ( result , [ session ] )
2015-05-13 20:22:39 +00:00
def test_shortcuts ( self ) :
2017-04-12 21:46:46 +00:00
num_default = len ( ClientDefaults . GetDefaultShortcuts ( ) )
2015-05-13 20:22:39 +00:00
2015-10-21 21:53:10 +00:00
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_SHORTCUTS )
2015-05-13 20:22:39 +00:00
2017-04-12 21:46:46 +00:00
self . assertEqual ( len ( result ) , num_default )
2015-05-13 20:22:39 +00:00
#
2017-04-12 21:46:46 +00:00
for ( i , shortcuts ) in enumerate ( ClientDefaults . GetDefaultShortcuts ( ) ) :
name = ' shortcuts ' + str ( i )
shortcuts . SetName ( name )
self . _write ( ' serialisable ' , shortcuts )
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_SHORTCUTS )
self . assertEqual ( len ( result ) , num_default + 1 )
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_SHORTCUTS , name )
for ( shortcut , command ) in shortcuts :
self . assertEqual ( result . GetCommand ( shortcut ) . GetData ( ) , command . GetData ( ) )
#
self . _write ( ' delete_serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_SHORTCUTS , name )
result = self . _read ( ' serialisable_named ' , HydrusSerialisable . SERIALISABLE_TYPE_SHORTCUTS )
self . assertEqual ( len ( result ) , num_default )
2015-05-13 20:22:39 +00:00
2014-10-01 22:58:32 +00:00
class TestServerDB ( unittest . TestCase ) :
2017-04-05 21:16:40 +00:00
def _read ( self , action , * args , * * kwargs ) : return TestServerDB . _db . Read ( action , HC . HIGH_PRIORITY , * args , * * kwargs )
def _write ( self , action , * args , * * kwargs ) : return TestServerDB . _db . Write ( action , HC . HIGH_PRIORITY , True , * args , * * kwargs )
2014-10-01 22:58:32 +00:00
@classmethod
2017-04-05 21:16:40 +00:00
def setUpClass ( cls ) :
2014-10-01 22:58:32 +00:00
2017-05-10 21:33:58 +00:00
cls . _db = ServerDB . DB ( HG . test_controller , TestConstants . DB_DIR , ' server ' )
2014-10-01 22:58:32 +00:00
@classmethod
2017-04-05 21:16:40 +00:00
def tearDownClass ( cls ) :
2014-10-01 22:58:32 +00:00
2017-04-05 21:16:40 +00:00
cls . _db . Shutdown ( )
2014-10-01 22:58:32 +00:00
2017-04-05 21:16:40 +00:00
while not cls . _db . LoopIsFinished ( ) :
2016-03-16 22:19:14 +00:00
time . sleep ( 0.1 )
2017-04-05 21:16:40 +00:00
del cls . _db
2014-10-01 22:58:32 +00:00
2014-10-08 20:17:55 +00:00
def _test_account_creation ( self ) :
2014-10-29 21:39:01 +00:00
result = self . _read ( ' account_types ' , self . _tag_service_key )
2014-10-08 20:17:55 +00:00
2014-10-29 21:39:01 +00:00
( service_admin_at , ) = result
self . assertEqual ( service_admin_at . GetTitle ( ) , ' service admin ' )
self . assertEqual ( service_admin_at . GetPermissions ( ) , [ HC . GET_DATA , HC . POST_DATA , HC . POST_PETITIONS , HC . RESOLVE_PETITIONS , HC . MANAGE_USERS , HC . GENERAL_ADMIN ] )
self . assertEqual ( service_admin_at . GetMaxBytes ( ) , None )
self . assertEqual ( service_admin_at . GetMaxRequests ( ) , None )
#
2015-03-25 22:04:19 +00:00
user_at = HydrusData . AccountType ( ' user ' , [ HC . GET_DATA , HC . POST_DATA ] , ( 50000 , 500 ) )
2014-10-29 21:39:01 +00:00
edit_log = [ ( HC . ADD , user_at ) ]
self . _write ( ' account_types ' , self . _tag_service_key , edit_log )
result = self . _read ( ' account_types ' , self . _tag_service_key )
( at_1 , at_2 ) = result
d = { at_1 . GetTitle ( ) : at_1 , at_2 . GetTitle ( ) : at_2 }
at = d [ ' user ' ]
self . assertEqual ( at . GetPermissions ( ) , [ HC . GET_DATA , HC . POST_DATA ] )
self . assertEqual ( at . GetMaxBytes ( ) , 50000 )
self . assertEqual ( at . GetMaxRequests ( ) , 500 )
#
2015-03-25 22:04:19 +00:00
user_at_diff = HydrusData . AccountType ( ' user different ' , [ HC . GET_DATA ] , ( 40000 , None ) )
2014-10-29 21:39:01 +00:00
edit_log = [ ( HC . EDIT , ( ' user ' , user_at_diff ) ) ]
self . _write ( ' account_types ' , self . _tag_service_key , edit_log )
result = self . _read ( ' account_types ' , self . _tag_service_key )
( at_1 , at_2 ) = result
d = { at_1 . GetTitle ( ) : at_1 , at_2 . GetTitle ( ) : at_2 }
at = d [ ' user different ' ]
self . assertEqual ( at . GetPermissions ( ) , [ HC . GET_DATA ] )
self . assertEqual ( at . GetMaxBytes ( ) , 40000 )
self . assertEqual ( at . GetMaxRequests ( ) , None )
#
r_keys = self . _read ( ' registration_keys ' , self . _tag_service_key , 5 , ' user different ' , 86400 * 365 )
self . assertEqual ( len ( r_keys ) , 5 )
for r_key in r_keys : self . assertEqual ( len ( r_key ) , 32 )
r_key = r_keys [ 0 ]
2017-03-08 23:23:12 +00:00
access_key = self . _read ( ' access_key ' , self . _tag_service_key , r_key )
access_key_2 = self . _read ( ' access_key ' , self . _tag_service_key , r_key )
2014-10-29 21:39:01 +00:00
self . assertNotEqual ( access_key , access_key_2 )
self . assertRaises ( HydrusExceptions . ForbiddenException , self . _read , ' account_key_from_access_key ' , self . _tag_service_key , access_key )
account_key = self . _read ( ' account_key_from_access_key ' , self . _tag_service_key , access_key_2 )
self . assertRaises ( HydrusExceptions . ForbiddenException , self . _read , ' access_key ' , r_key )
2014-10-08 20:17:55 +00:00
def _test_content_creation ( self ) :
# create some tag and hashes business, try uploading a file, and test that
# fetch content update, test it. I think that works
pass
def _test_init_server_admin ( self ) :
2017-03-08 23:23:12 +00:00
result = self . _read ( ' access_key ' , HC . SERVER_ADMIN_KEY , ' init ' )
2014-10-08 20:17:55 +00:00
2014-10-22 22:31:58 +00:00
self . assertEqual ( type ( result ) , str )
self . assertEqual ( len ( result ) , 32 )
self . _admin_access_key = result
result = self . _read ( ' account_key_from_access_key ' , HC . SERVER_ADMIN_KEY , self . _admin_access_key )
self . assertEqual ( type ( result ) , str )
self . assertEqual ( len ( result ) , 32 )
self . _admin_account_key = result
2014-10-08 20:17:55 +00:00
def _test_service_creation ( self ) :
2015-07-01 22:02:07 +00:00
self . _tag_service_key = HydrusData . GenerateKey ( )
self . _file_service_key = HydrusData . GenerateKey ( )
2014-10-22 22:31:58 +00:00
edit_log = [ ]
2014-10-08 20:17:55 +00:00
2014-10-22 22:31:58 +00:00
t_options = { ' max_monthly_data ' : None , ' message ' : ' tag repo message ' , ' port ' : 100 , ' upnp ' : None }
f_options = { ' max_monthly_data ' : None , ' message ' : ' file repo message ' , ' port ' : 101 , ' upnp ' : None }
2014-10-08 20:17:55 +00:00
2014-10-22 22:31:58 +00:00
edit_log . append ( ( HC . ADD , ( self . _tag_service_key , HC . TAG_REPOSITORY , t_options ) ) )
edit_log . append ( ( HC . ADD , ( self . _file_service_key , HC . FILE_REPOSITORY , f_options ) ) )
2014-10-08 20:17:55 +00:00
2014-10-22 22:31:58 +00:00
result = self . _write ( ' services ' , self . _admin_account_key , edit_log )
2014-10-08 20:17:55 +00:00
2014-10-22 22:31:58 +00:00
self . assertIn ( self . _tag_service_key , result )
self . _tag_service_admin_access_key = result [ self . _tag_service_key ]
self . assertEqual ( type ( self . _tag_service_admin_access_key ) , str )
self . assertEqual ( len ( self . _tag_service_admin_access_key ) , 32 )
self . assertIn ( self . _file_service_key , result )
self . _file_service_admin_access_key = result [ self . _file_service_key ]
self . assertEqual ( type ( self . _tag_service_admin_access_key ) , str )
self . assertEqual ( len ( self . _tag_service_admin_access_key ) , 32 )
#
result = self . _read ( ' service_keys ' , HC . REPOSITORIES )
self . assertEqual ( set ( result ) , { self . _tag_service_key , self . _file_service_key } )
#
result = self . _read ( ' services_info ' )
services_info = { service_key : ( service_type , options ) for ( service_key , service_type , options ) in result }
self . assertEqual ( services_info [ HC . SERVER_ADMIN_KEY ] , ( 99 , { ' max_monthly_data ' : None , ' message ' : ' hydrus server administration service ' , ' max_storage ' : None , ' upnp ' : None , ' port ' : 45870 } ) )
self . assertEqual ( services_info [ self . _tag_service_key ] , ( HC . TAG_REPOSITORY , t_options ) )
self . assertEqual ( services_info [ self . _file_service_key ] , ( HC . FILE_REPOSITORY , f_options ) )
#
f_options_modified = dict ( f_options )
f_options_modified [ ' port ' ] = 102
edit_log = [ ( HC . EDIT , ( self . _file_service_key , HC . FILE_REPOSITORY , f_options_modified ) ) ]
self . _write ( ' services ' , self . _admin_account_key , edit_log )
result = self . _read ( ' services_info ' )
services_info = { service_key : ( service_type , options ) for ( service_key , service_type , options ) in result }
self . assertEqual ( services_info [ self . _file_service_key ] , ( HC . FILE_REPOSITORY , f_options_modified ) )
2014-10-08 20:17:55 +00:00
def test_server ( self ) :
self . _test_init_server_admin ( )
self . _test_service_creation ( )
self . _test_account_creation ( )
self . _test_content_creation ( )