1# -*- coding: utf-8 -*-
2
3import os, urllib, urllib2, time, random
4from StringIO import StringIO
5from smb.SMBHandler import SMBHandler
6import util
7
8
9try:
10    import hashlib
11    def MD5(): return hashlib.md5()
12except ImportError:
13    import md5
14    def MD5(): return md5.new()
15
16
17
18def test_basic():
19    # Basic test for smb URLs
20    director = urllib2.build_opener(SMBHandler)
21    fh = director.open('smb://%(user)s:%(password)s@%(server_ip)s/smbtest/rfc1001.txt' % util.getConnectionInfo())
22
23    s = fh.read()
24    md = MD5()
25    md.update(s)
26    assert md.hexdigest() == '5367c2bbf97f521059c78eab65309ad3'
27    assert len(s) == 158437
28
29    fh.close()
30
31
32def test_unicode():
33    # Test smb URLs with unicode paths
34    director = urllib2.build_opener(SMBHandler)
35    fh = director.open(u'smb://%(user)s:%(password)s@%(server_ip)s/smbtest/测试文件夹/垃圾文件.dat' % util.getConnectionInfo())
36
37    s = fh.read()
38    md = MD5()
39    md.update(s)
40    assert md.hexdigest() == '8a44c1e80d55e91c92350955cdf83442'
41    assert len(s) == 256000
42
43    fh.close()
44
45
46
47TEST_FILENAME = os.path.join(os.path.dirname(__file__), os.pardir, 'SupportFiles', 'binary.dat')
48TEST_FILESIZE = 256000
49TEST_DIGEST = 'bb6303f76e29f354b6fdf6ef58587e48'
50
51def test_upload():
52    info = util.getConnectionInfo()
53    info['filename'] = os.sep + 'StoreTest-%d-%d.dat' % ( time.time(), random.randint(0, 10000) )
54
55    director = urllib2.build_opener(SMBHandler)
56    upload_fh = director.open('smb://%(user)s:%(password)s@%(server_ip)s/smbtest/%(filename)s' % info, data = open(TEST_FILENAME, 'rb'))
57
58    retr_fh = director.open('smb://%(user)s:%(password)s@%(server_ip)s/smbtest/%(filename)s' % info)
59
60    s = retr_fh.read()
61    md = MD5()
62    md.update(s)
63
64    assert md.hexdigest() == TEST_DIGEST
65    assert len(s) == TEST_FILESIZE
66
67