configurationengine/source/cone/storage/tests/unittest_zipstorage.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
Test the CPF root file parsing routines
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
"""
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
import zipfile
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
import string
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
import sys,os,shutil
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
import __init__
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
from cone.public import exceptions, api
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
from cone.storage import zipstorage
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
datazip   = os.path.join(ROOT_PATH,"data.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
#class TestZipStorageDummy(unittest.TestCase): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
#    def test_open_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
#        storage = zipstorage.ZipStorage("TestProlog.zip","r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
#        res = storage.open_resource("TestProlog")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
#        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
class TestZipStorage(unittest.TestCase): 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
    def test_create_new_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        storage = zipstorage.ZipStorage("new.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        self.assertTrue(os.path.exists("new.zip"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        os.unlink("new.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
    def test_open_existing_storage(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        storage = zipstorage.ZipStorage(datazip,"r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
    def test_open_existing_storage_and_close_twice(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        storage = zipstorage.ZipStorage(datazip,"r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
            storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
            self.fail('closing twice succeeds!')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        except exceptions.StorageException:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
            pass
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
    def test_open_nonexisting_storage_fails(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
            storage = zipstorage.ZipStorage("foo.zip","r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
            storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
            self.fail("opening a non existing ZipStorage succeeded?")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        except zipstorage.ZipException:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
            self.assertTrue(True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
    def test_open_a_non_zipfile_fails(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            storage = zipstorage.ZipStorage("data/onefile/test.txt","r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
            storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
            self.fail("opening a non zipfile for ZipStorage succeeded?")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        except zipstorage.ZipException,e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
            self.assertTrue(True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
class TestStorage(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        shutil.copyfile(datazip,"temptests.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        self.storage = zipstorage.ZipStorage("temptests.zip","a")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    def tearDown(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
        self.storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
        os.unlink("temptests.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    def test_open_resource_existing_file_for_reading(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        res = self.storage.open_resource("data/simple.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        self.assertTrue(res)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
        self.assertTrue(isinstance(res,api.Resource))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
    def test_open_resource_new_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        storage = zipstorage.ZipStorage("testnewfile.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        res = storage.open_resource("data/newfile.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        res.write("test write")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self.assertTrue(res)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        self.assertTrue(isinstance(res,api.Resource))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        self.assertEquals(storage.list_resources("",True), ['data/newfile.txt'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        os.unlink("testnewfile.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
    def test_open_resource_nonexisting(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
            res = self.storage.open_resource("iamnothere.txt")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
            self.fail("Opening of a non existing file succeeds!??")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
        except exceptions.NotResource: 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
            self.assertTrue(True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
    def test_list_resources_nonrecurse(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        storage = zipstorage.ZipStorage("testnonrecurse.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        res = storage.open_resource("data/morestuff.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        res = storage.open_resource("data/prodX.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        file_array = storage.list_resources("data")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        self.assertEquals(file_array[0],"data/morestuff.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        self.assertEquals(file_array[1],"data/prodX.confml")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        os.unlink("testnonrecurse.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
    def test_list_resources_recurse(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        storage = zipstorage.ZipStorage("testrecurse.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        res = storage.open_resource("data/foo/morestuff.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        res = storage.open_resource("data/prodX.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        res = storage.open_resource("data/ncp11/confml/jallaa.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        file_array = storage.list_resources("data",True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        self.assertEquals(file_array,['data/foo/morestuff.confml', 'data/prodX.confml', 'data/ncp11/confml/jallaa.confml'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        os.unlink("testrecurse.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
    def test_is_resource_true(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        res = self.storage.open_resource("data/simple.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        self.assertTrue(self.storage.is_resource("data/simple.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
    def test_is_resource_true_for_dotted_file(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        res = self.storage.open_resource(".metadata","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        self.assertTrue(self.storage.is_resource(".metadata"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
    def test_is_resource_true_with_slash(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        res = self.storage.open_resource("data/simple.confml","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        self.assertTrue(self.storage.is_resource("/data/simple.confml"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
    def test_is_resource_false(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
        self.assertFalse(self.storage.is_resource("data"))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
    def test_metadata_writing(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        fs = zipstorage.ZipStorage("testtemp.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        fs.set_active_configuration('testing.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        fs.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        fs = zipstorage.ZipStorage("testtemp.zip","r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        self.assertEquals(fs.get_active_configuration(),'testing.confml')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        fs.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        os.unlink("testtemp.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
    def test_open_resource_new_file_and_overwrite(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        storage = api.Storage.open("testoverwrite.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        res = storage.open_resource("data/newfile.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        res.write("test write")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        self.assertTrue(res)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        self.assertTrue(isinstance(res,api.Resource))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        res = storage.open_resource("data/newfile.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        res.write("Hahaaa")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        storage = api.Storage.open("testoverwrite.zip","r")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        self.assertEquals(storage.open_resource("data/newfile.txt").read(), "Hahaaa")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        os.unlink("testoverwrite.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
    def test_delete_resource(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
        storage = api.Storage.open("testdelete.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        res = storage.open_resource("data/newfile.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        res.write("test write")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        res = storage.open_resource("readme.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        res.write("test 2")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        storage2 = api.Storage.open("testdelete.zip","a")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        #self.assertEquals(storage2.list_resources("",True), ['.metadata', 'data/newfile.txt', 'readme.txt'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        self.assertEquals(storage2.open_resource("data/newfile.txt").read(),"test write")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        storage2.delete_resource("data/newfile.txt")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
        self.assertEquals(len(storage2.list_resources("",True)),2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
        storage2.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
        storage3 = api.Storage.open("testdelete.zip","a")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        self.assertEquals(storage3.list_resources("",True), ['readme.txt','.metadata'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        storage3.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        os.unlink("testdelete.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
    def test_create_folder(self):        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
        storage = api.Storage.open("empty_folder.zip","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        res = storage.open_resource("test.txt","w")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        res.write('test')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
        res.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
        storage.create_folder("data")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        storage.create_folder("data2/folder1")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        storage.create_folder("data3\\")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        storage.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
        storage2 = api.Storage.open("empty_folder.zip","a")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
        self.assertEquals(storage2.is_folder("data"),True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        self.assertEquals(storage2.is_folder("data2/folder1"),True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        self.assertEquals(storage2.is_folder("data3"),True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        self.assertEquals(storage2.list_resources('.',True),['test.txt','.metadata'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        self.assertEquals(storage2.list_resources(''),['test.txt','.metadata'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        storage2.close()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
        os.unlink("empty_folder.zip")
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
class TestZipStorageListResources(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
    def _run_test_list_resources(self, zip_file):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        full_path = os.path.join(ROOT_PATH, 'list_resources_data', zip_file)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
        zs = zipstorage.ZipStorage(full_path, 'r')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        res_list = zs.list_resources('/', recurse=True, empty_folders=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
        expected = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
            ('folder',      'test'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
            ('folder',      'test/layer'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
            ('folder',      'test/layer/confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
            ('folder',      'test/layer/content'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
            ('folder',      'test/layer/content/empty'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
            ('folder',      'test/layer/content/something'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
            ('resource',    'test/layer/content/something/x.txt'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
            ('folder',      'test/layer/doc'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
            ('folder',      'test/layer/implml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
            ('resource',    'test/layer/root.confml'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
            ('resource',    'test/root.confml')]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        for type, res in expected:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
            if type == 'resource':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
                self.assertTrue(zs.is_resource(res), "zs.is_resource('%s') returns False" % res)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
            elif type == 'folder':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
                self.assertTrue(zs.is_folder(res), "zs.is_folder('%s') returns False" % res)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
            else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
                raise RuntimeError('Invalid type')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
    def test_list_resources_7zip_zipped(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
        self._run_test_list_resources('7zip.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
    def test_list_resources_winzip_zipped(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
        self._run_test_list_resources('winzip.zip')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
    def test_list_resources_carbide_ct_zipped(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
        self._run_test_list_resources('carbide.ct.cpf')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
      unittest.main()