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
« 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
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
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)
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)
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)
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)
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)
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)
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)
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 )
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)
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 )
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)