filestoraged/src/tests/dodb-tests.cr

50 lines
1.2 KiB
Crystal

require "dodb"
require "json"
require "../common/filestorage.cr"
# this is a copy of User and TransferInfo classes from src/server/context.cr
class User
property uid : Int32
property token : FileStorage::Token
property uploads : Array(FileStorage::UploadRequest)
property downloads : Array(FileStorage::DownloadRequest)
def initialize(@token,
@uploads = Array(FileStorage::UploadRequest).new,
@downloads = Array(FileStorage::DownloadRequest).new)
@uid = token.uid
end
end
class TransferInfo
include JSON::Serializable
property owner : Int32
property file_info : FileStorage::FileInfo
property chunks : Hash(Int32, Bool)
def initialize(@owner, @file_info)
@chunks = Hash(Int32, Bool).new
@file_info.nb_chunks.times do |n|
@chunks[n] = false
end
end
end
file_info_directory = "./file-infos"
def init_db(file_info_directory : String)
db = DODB::DataBase(TransferInfo).new file_info_directory
# search file informations by their index, owner and tags
pp! db_by_filedigest = db.new_index "filedigest", &.file_info.digest
pp! db_by_owner = db.new_partition "owner", &.owner.to_s
pp! db_by_tags = db.new_tags "tags", &.file_info.tags.not_nil!
db
end
db = init_db file_info_directory
pp! db