Package pike :: Package test :: Module set
[hide private]
[frames] | no frames]

Source Code for Module pike.test.set

  1  # 
  2  # Copyright (c) 2013, EMC Corporation 
  3  # All rights reserved. 
  4  # 
  5  # Redistribution and use in source and binary forms, with or without 
  6  # modification, are permitted provided that the following conditions are met: 
  7  # 
  8  # 1. Redistributions of source code must retain the above copyright notice, 
  9  # this list of conditions and the following disclaimer. 
 10  # 2. Redistributions in binary form must reproduce the above copyright notice, 
 11  # this list of conditions and the following disclaimer in the documentation 
 12  # and/or other materials provided with the distribution. 
 13  # 
 14  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 15  # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 16  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 17  # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
 18  # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 19  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 20  # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 21  # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 22  # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 23  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 24  # POSSIBILITY OF SUCH DAMAGE. 
 25  # 
 26  # Module Name: 
 27  # 
 28  #        set.py 
 29  # 
 30  # Abstract: 
 31  # 
 32  #        SMB2_SET_INFO command tests with SMB2_0_INFO_FILE type. 
 33  # 
 34  # Authors: Rafal Szczesniak (rafal.szczesniak@isilon.com) 
 35  # 
 36   
 37  import pike.model 
 38  import pike.smb2 
 39  import pike.nttime 
 40  import pike.test 
 41  import datetime 
 42   
 43  from pike.test import unittest 
 44   
 45   
46 -class SetTest(pike.test.PikeTest):
47 - def open_file(self):
48 self.chan, self.tree = self.tree_connect() 49 return self.chan.create(self.tree, "test.txt", disposition=pike.smb2.FILE_SUPERSEDE).result()
50 51 # Set timestamps and file attributes with FILE_BASIC_INFORMATION
52 - def test_set_file_basic_info(self):
53 handle = self.open_file() 54 now = pike.nttime.NtTime(datetime.datetime.now()) 55 56 with self.chan.set_file_info(handle, pike.smb2.FileBasicInformation) as file_info: 57 file_info.last_write_time = now 58 file_info.last_access_time = now 59 60 with self.chan.set_file_info(handle, pike.smb2.FileBasicInformation) as file_info: 61 file_info.file_attributes = pike.smb2.FILE_ATTRIBUTE_READONLY 62 63 with self.chan.set_file_info(handle, pike.smb2.FileBasicInformation) as file_info: 64 file_info.file_attributes = pike.smb2.FILE_ATTRIBUTE_NORMAL 65 66 self.chan.close(handle)
67 68 # Set file cursor position with FILE_POSITION_INFORMATION
70 handle = self.open_file() 71 72 with self.chan.set_file_info(handle, pike.smb2.FilePositionInformation) as file_info: 73 file_info.current_byte_offset = 100L 74 75 self.chan.close(handle)
76 77 # Set file mode with FILE_MODE_INFORMATION
78 - def test_set_file_mode_info(self):
79 handle = self.open_file() 80 81 with self.chan.set_file_info(handle, pike.smb2.FileModeInformation) as file_info: 82 file_info.mode = pike.smb2.FILE_SEQUENTIAL_ONLY 83 84 self.chan.close(handle)
85 86 # Set file name with FILE_RENAME_INFORMATION
87 - def test_set_file_name(self):
88 self.chan, self.tree = self.tree_connect() 89 handle = self.chan.create(self.tree, "test.txt", 90 disposition=pike.smb2.FILE_SUPERSEDE, 91 access=pike.smb2.DELETE).result() 92 93 with self.chan.set_file_info(handle, pike.smb2.FileRenameInformation) as file_info: 94 file_info.replace_if_exists = 1 95 file_info.file_name = "renamed.txt" 96 97 self.chan.close(handle) 98 99 # open the renamed file for delete and ensure that it exists 100 handle2 = self.chan.create(self.tree, "renamed.txt", 101 disposition=pike.smb2.FILE_OPEN, # fail if doesn't exist 102 access=pike.smb2.DELETE, 103 options=pike.smb2.FILE_DELETE_ON_CLOSE).result() 104 self.chan.close(handle2)
105