Coverage for test/d7a/alp/test_command_factory.py: 100%

121 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-05-24 08:03 +0200

1# 

2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV. 

3# 

4# This file is part of pyd7a. 

5# See https://github.com/Sub-IoT/pyd7a for further info. 

6# 

7# Licensed under the Apache License, Version 2.0 (the "License"); 

8# you may not use this file except in compliance with the License. 

9# You may obtain a copy of the License at 

10# 

11# http://www.apache.org/licenses/LICENSE-2.0 

12# 

13# Unless required by applicable law or agreed to in writing, software 

14# distributed under the License is distributed on an "AS IS" BASIS, 

15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

16# See the License for the specific language governing permissions and 

17# limitations under the License. 

18# 

19import unittest 

20 

21from d7a.alp.command import Command 

22from d7a.alp.interface import InterfaceType 

23from d7a.alp.operands.file import DataRequest, Data, FileIdOperand 

24from d7a.alp.operands.file_header import FileHeaderOperand 

25from d7a.alp.operands.offset import Offset 

26from d7a.alp.operands.interface_configuration import InterfaceConfiguration 

27from d7a.alp.operations.file_management import CreateNewFile 

28from d7a.alp.operations.forward import Forward 

29from d7a.alp.operations.requests import ReadFileData, ReadFileHeader 

30from d7a.alp.operations.responses import ReturnFileData 

31from d7a.alp.operations.write_operations import WriteFileData, WriteFileHeader 

32from d7a.alp.regular_action import RegularAction 

33from d7a.fs.file_header import FileHeader 

34from d7a.fs.file_permissions import FilePermissions 

35from d7a.fs.file_properties import FileProperties, ActionCondition, StorageClass 

36from d7a.sp.configuration import Configuration 

37 

38 

39class TestCommandFactory(unittest.TestCase): 

40 def test_create_with_read_file_action(self): 

41 c = Command.create_with_read_file_action(file_id=1, length=10) 

42 self.assertEqual(len(c.actions), 1) 

43 self.assertEqual(type(c.actions[0]), RegularAction) 

44 self.assertEqual(type(c.actions[0].operation), ReadFileData) 

45 self.assertEqual(type(c.actions[0].operand), DataRequest) 

46 self.assertEqual(c.actions[0].operand.offset.id, 1) 

47 self.assertEqual(c.actions[0].operand.offset.offset.value, 0) 

48 self.assertEqual(c.actions[0].operand.length, 10) 

49 

50 def test_create_with_write_file_action(self): 

51 data = [0, 1, 2, 3, 4, 5] 

52 c = Command.create_with_write_file_action(file_id=1, data=data) 

53 self.assertEqual(len(c.actions), 1) 

54 self.assertEqual(type(c.actions[0]), RegularAction) 

55 self.assertEqual(type(c.actions[0].operation), WriteFileData) 

56 self.assertEqual(type(c.actions[0].operand), Data) 

57 self.assertEqual(c.actions[0].operand.offset.id, 1) 

58 self.assertEqual(c.actions[0].operand.offset.offset.value, 0) 

59 self.assertEqual(c.actions[0].operand.length, 6) 

60 self.assertEqual(c.actions[0].operand.data, data) 

61 

62 def test_create_with_return_file_data_action(self): 

63 data = [ 1 ] 

64 c = Command.create_with_return_file_data_action(file_id=0x40, data=data) 

65 self.assertEqual(len(c.actions), 1) 

66 self.assertEqual(type(c.actions[0]), RegularAction) 

67 self.assertEqual(type(c.actions[0].operation), ReturnFileData) 

68 self.assertEqual(type(c.actions[0].operand), Data) 

69 self.assertEqual(c.actions[0].operand.offset.id, 0x40) 

70 self.assertEqual(c.actions[0].operand.offset.offset.value, 0) 

71 self.assertEqual(c.actions[0].operand.length, 1) 

72 self.assertEqual(c.actions[0].operand.data, data) 

73 

74 def test_create_with_read_file_action_d7asp(self): 

75 c = Command.create_with_read_file_action(file_id=1, length=10, interface_type=InterfaceType.D7ASP) 

76 self.assertEqual(len(c.actions), 2) 

77 self.assertEqual(type(c.actions[0]), RegularAction) 

78 self.assertEqual(type(c.actions[0].operation), Forward) 

79 self.assertEqual(type(c.actions[0].operand), InterfaceConfiguration) 

80 self.assertEqual(c.actions[0].operand.interface_id.value, 0xD7) 

81 self.assertEqual(type(c.actions[0].operand.interface_configuration), Configuration) 

82 # TODO configuration properties 

83 self.assertEqual(type(c.actions[1].operation), ReadFileData) 

84 self.assertEqual(type(c.actions[1].operand), DataRequest) 

85 self.assertEqual(type(c.actions[1]), RegularAction) 

86 self.assertEqual(type(c.actions[1].operation), ReadFileData) 

87 self.assertEqual(type(c.actions[1].operand), DataRequest) 

88 self.assertEqual(c.actions[1].operand.offset.id, 1) 

89 self.assertEqual(c.actions[1].operand.offset.offset.value, 0) 

90 self.assertEqual(c.actions[1].operand.length, 10) 

91 

92 def test_create_with_write_file_action_d7asp(self): 

93 data = [0, 1, 2, 3, 4, 5] 

94 c = Command.create_with_write_file_action(file_id=1, data=data, interface_type=InterfaceType.D7ASP) 

95 self.assertEqual(len(c.actions), 2) 

96 self.assertEqual(type(c.actions[0]), RegularAction) 

97 self.assertEqual(type(c.actions[0].operation), Forward) 

98 self.assertEqual(type(c.actions[0].operand), InterfaceConfiguration) 

99 self.assertEqual(c.actions[0].operand.interface_id.value, 0xD7) 

100 self.assertEqual(type(c.actions[0].operand.interface_configuration), Configuration) 

101 # TODO configuration properties 

102 self.assertEqual(type(c.actions[1].operation), WriteFileData) 

103 self.assertEqual(type(c.actions[1].operand), Data) 

104 self.assertEqual(c.actions[1].operand.offset.id, 1) 

105 self.assertEqual(c.actions[1].operand.offset.offset.value, 0) 

106 self.assertEqual(c.actions[1].operand.length, 6) 

107 self.assertEqual(c.actions[1].operand.data, data) 

108 

109 def test_create_with_return_file_data_action_d7asp(self): 

110 data = [1] 

111 c = Command.create_with_return_file_data_action(file_id=0x40, data=data, interface_type=InterfaceType.D7ASP) 

112 self.assertEqual(len(c.actions), 2) 

113 self.assertEqual(type(c.actions[0]), RegularAction) 

114 self.assertEqual(type(c.actions[0].operation), Forward) 

115 self.assertEqual(type(c.actions[0].operand), InterfaceConfiguration) 

116 self.assertEqual(c.actions[0].operand.interface_id.value, 0xD7) 

117 self.assertEqual(type(c.actions[0].operand.interface_configuration), Configuration) 

118 self.assertEqual(type(c.actions[1]), RegularAction) 

119 self.assertEqual(type(c.actions[1].operation), ReturnFileData) 

120 self.assertEqual(type(c.actions[1].operand), Data) 

121 self.assertEqual(c.actions[1].operand.offset.id, 0x40) 

122 self.assertEqual(c.actions[1].operand.offset.offset.value, 0) 

123 self.assertEqual(c.actions[1].operand.length, 1) 

124 self.assertEqual(c.actions[1].operand.data, data) 

125 

126 

127 def test_create_with_read_file_header(self): 

128 c = Command.create_with_read_file_header(file_id=0x40) 

129 self.assertEqual(len(c.actions), 1) 

130 self.assertEqual(type(c.actions[0]), RegularAction) 

131 self.assertEqual(type(c.actions[0].operation), ReadFileHeader) 

132 self.assertEqual(type(c.actions[0].operand), FileIdOperand) 

133 self.assertEqual(c.actions[0].operand.file_id, 0x40) 

134 

135 

136 def test_create_with_write_file_header(self): 

137 file_header = FileHeader( 

138 permissions=FilePermissions( 

139 executable=True, 

140 encrypted=False, 

141 user_readable=True, 

142 user_writable=True, 

143 user_executable=False, 

144 guest_readable=True, 

145 guest_executable=False, 

146 guest_writable=False 

147 ), 

148 properties=FileProperties(act_enabled=False, act_condition=ActionCondition.WRITE, storage_class=StorageClass.PERMANENT), 

149 alp_command_file_id=0x41, 

150 interface_file_id=0x42, 

151 file_size=1, 

152 allocated_size=1 

153 ) 

154 

155 c = Command.create_with_write_file_header(file_id=0x40, file_header=file_header) 

156 self.assertEqual(len(c.actions), 1) 

157 self.assertEqual(type(c.actions[0]), RegularAction) 

158 self.assertEqual(type(c.actions[0].operation), WriteFileHeader) 

159 self.assertEqual(type(c.actions[0].operand), FileHeaderOperand) 

160 self.assertEqual(c.actions[0].operand.file_id, 0x40) 

161 self.assertEqual(c.actions[0].operand.file_header, file_header) 

162 

163 def test_create_with_create_file(self): 

164 file_header = FileHeader( 

165 permissions=FilePermissions( 

166 executable=True, 

167 encrypted=False, 

168 user_readable=True, 

169 user_writable=True, 

170 user_executable=False, 

171 guest_readable=True, 

172 guest_executable=False, 

173 guest_writable=False 

174 ), 

175 properties=FileProperties(act_enabled=False, act_condition=ActionCondition.WRITE, storage_class=StorageClass.PERMANENT), 

176 alp_command_file_id=0x41, 

177 interface_file_id=0x42, 

178 file_size=1, 

179 allocated_size=1 

180 ) 

181 

182 c = Command.create_with_create_new_file(file_id=0x40, file_header=file_header) 

183 self.assertEqual(len(c.actions), 1) 

184 self.assertEqual(type(c.actions[0]), RegularAction) 

185 self.assertEqual(type(c.actions[0].operation), CreateNewFile) 

186 self.assertEqual(type(c.actions[0].operand), FileHeaderOperand) 

187 self.assertEqual(c.actions[0].operand.file_id, 0x40) 

188 self.assertEqual(c.actions[0].operand.file_header, file_header)