diff --git a/framework/python/src/common/testreport.py b/framework/python/src/common/testreport.py index c1d990fa7..c62f29f73 100644 --- a/framework/python/src/common/testreport.py +++ b/framework/python/src/common/testreport.py @@ -21,7 +21,7 @@ import base64 import os from test_orc.test_case import TestCase -from jinja2 import Template +from jinja2 import Environment, FileSystemLoader from collections import OrderedDict DATE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' @@ -42,6 +42,8 @@ report_resource_dir = os.path.join(root_dir, RESOURCES_DIR) test_run_img_file = os.path.join(report_resource_dir, 'testrun.png') +qualification_icon = os.path.join(report_resource_dir, 'qualification-icon.png') +pilot_icon = os.path.join(report_resource_dir, 'pilot-icon.png') class TestReport(): @@ -153,6 +155,9 @@ def from_json(self, json_file): if 'test_pack' in json_file['device']: self._device['test_pack'] = json_file['device']['test_pack'] + if 'additional_info' in json_file['device']: + self._device['device_profile'] = json_file['device']['additional_info'] + self._status = json_file['status'] self._started = datetime.strptime(json_file['started'], DATE_TIME_FORMAT) self._finished = datetime.strptime(json_file['finished'], DATE_TIME_FORMAT) @@ -194,13 +199,8 @@ def to_pdf(self): def to_html(self): # Jinja template - with open(os.path.join(report_resource_dir, TEST_REPORT_TEMPLATE), - 'r', - encoding='UTF-8' - ) as template_file: - template = Template(template_file.read()) - - # Load styles + template_env = Environment(loader=FileSystemLoader(report_resource_dir)) + template = template_env.get_template(TEST_REPORT_TEMPLATE) with open(os.path.join(report_resource_dir, TEST_REPORT_STYLES), 'r', @@ -211,8 +211,15 @@ def to_html(self): # Load Testrun logo to base64 with open(test_run_img_file, 'rb') as f: logo = base64.b64encode(f.read()).decode('utf-8') + json_data=self.to_json() + # Icons + with open(qualification_icon, 'rb') as f: + icon_qualification = base64.b64encode(f.read()).decode('utf-8') + with open(pilot_icon, 'rb') as f: + icon_pilot = base64.b64encode(f.read()).decode('utf-8') + # Convert the timestamp strings to datetime objects start_time = datetime.strptime(json_data['started'], '%Y-%m-%d %H:%M:%S') end_time = datetime.strptime(json_data['finished'], '%Y-%m-%d %H:%M:%S') @@ -234,13 +241,18 @@ def to_html(self): module_reports = self._get_module_pages() pages_num = self._pages_num(json_data) - total_pages = pages_num + len(module_reports) - + total_pages = pages_num + len(module_reports) + 1 if len(steps_to_resolve) > 0: total_pages += 1 + if (len(optional_steps_to_resolve) > 0 + and json_data['device']['test_pack'] == 'Pilot Assessment' + ): + total_pages += 1 return template.render(styles=styles, logo=logo, + icon_qualification=icon_qualification, + icon_pilot=icon_pilot, version=self._version, json_data=json_data, device=json_data['device'], diff --git a/resources/report/device_qualification_report_example.html b/resources/report/device_qualification_report_example.html new file mode 100644 index 000000000..6765954c5 --- /dev/null +++ b/resources/report/device_qualification_report_example.html @@ -0,0 +1,1566 @@ + + + + + + + + Testrun Report + + + + + + + + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + +
+
+
+

Manufacturer

+
dell
+
+

Model

+
wyse
+
+

Firmware

+
123
+
+

MAC Address

+
f0:d4:e2:f2:f5:41
+
+
+
+
+

Device Configuration

+
+ +
+ + + + Protocol +
+ +
+ + + + Connection +
+ +
+ + + + TLS +
+ +
+ + + + DNS +
+ +
+ + + + Services +
+ +
+ + + + NTP +
+ +
+ +
+ +
Test Status
+
Complete
+
Test Result
+
Non-Compliant
+
Started
+
2024-10-01 15:47:16
+
Duration
+
0:10:12
+
+
+ + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
protocol.valid_bacnet
+
BACnet device could not be discovered
+ +
+ + Feature Not Detected
+
+ +
+
protocol.bacnet.version
+
Device did not respond to BACnet discovery
+ +
+ + Feature Not Detected
+
+ +
+
protocol.valid_modbus
+
Device did not respond to Modbus connection
+ +
+ + Feature Not Detected
+
+ +
+
connection.port_link
+
Port stats not available
+ +
+ + Error
+
+ +
+
connection.port_speed
+
Succesfully auto-negotiated speeds above 10 Mbps
+ +
+ + Compliant
+
+ +
+
connection.port_duplex
+
Succesfully auto-negotiated full duplex
+ +
+ + Compliant
+
+ +
+
connection.switch.arp_inspection
+
Device uses ARP
+ +
+ + Compliant
+
+ +
+
connection.switch.dhcp_snooping
+
Device does not act as a DHCP server
+ +
+ + Compliant
+
+ +
+
connection.dhcp_address
+
Device responded to leased ip address
+ +
+ + Compliant
+
+ +
+
connection.mac_address
+
MAC address found: f0:d4:e2:f2:f5:41
+ +
+ + Compliant
+
+ +
+
connection.mac_oui
+
OUI Manufacturer found: Dell Inc.
+ +
+ + Compliant
+
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
connection.private_address
+
All subnets are supported
+ +
+ + Compliant
+
+ +
+
connection.shared_address
+
All subnets are supported
+ +
+ + Compliant
+
+ +
+
connection.dhcp_disconnect
+
Device received a DHCP lease after disconnect
+ +
+ + Compliant
+
+ +
+
connection.dhcp_disconnect_ip_change
+
Device received expected IP address after disconnect
+ +
+ + Compliant
+
+ +
+
connection.single_ip
+
Device is using a single IP address
+ +
+ + Compliant
+
+ +
+
connection.target_ping
+
Device responds to ping
+ +
+ + Compliant
+
+ +
+
connection.ipaddr.ip_change
+
Device has accepted an IP address change
+ +
+ + Compliant
+
+ +
+
connection.ipaddr.dhcp_failover
+
Secondary DHCP server lease confirmed active in device
+ +
+ + Compliant
+
+ +
+
connection.ipv6_slaac
+
Device has formed SLAAC address fd10:77be:4186:0:f2d4:e2ff:fef2:f541
+ +
+ + Compliant
+
+ +
+
connection.ipv6_ping
+
Device responds to IPv6 ping on fd10:77be:4186:0:f2d4:e2ff:fef2:f541
+ +
+ + Compliant
+
+ +
+
security.tls.v1_2_server
+
TLS 1.2 certificate could not be validated
+ +
+ + Error
+
+ +
+
security.tls.v1_2_client
+
No outbound connections were found
+ +
+ + Feature Not Detected
+
+ +
+
security.tls.v1_3_server
+
TLS 1.3 certificate could not be validated
+ +
+ + Error
+
+ +
+
security.tls.v1_3_client
+
No outbound connections were found
+ +
+ + Feature Not Detected
+
+ +
+
dns.network.hostname_resolution
+
No DNS traffic detected from the device
+ +
+ + Non-Compliant
+
+ +
+
dns.network.from_dhcp
+
No DNS traffic detected from the device
+ +
+ + Informational
+
+ +
+
dns.mdns
+
No MDNS traffic detected from the device
+ +
+ + Informational
+
+ +
+
security.services.ftp
+
No FTP server found
+ +
+ + Compliant
+
+ +
+
security.ssh.version
+
SSH server found running 9.7 protocol 2.0
+ +
+ + Compliant
+
+ +
+
security.services.telnet
+
No telnet server found
+ +
+ + Compliant
+
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
security.services.smtp
+
No SMTP server found
+ +
+ + Compliant
+
+ +
+
security.services.http
+
No HTTP server found
+ +
+ + Compliant
+
+ +
+
security.services.pop
+
No POP server found
+ +
+ + Compliant
+
+ +
+
security.services.imap
+
No IMAP server found
+ +
+ + Compliant
+
+ +
+
security.services.snmpv3
+
No SNMP server found
+ +
+ + Compliant
+
+ +
+
security.services.vnc
+
No VNC server found
+ +
+ + Compliant
+
+ +
+
security.services.tftp
+
No TFTP server found
+ +
+ + Compliant
+
+ +
+
ntp.network.ntp_server
+
No NTP server found
+ +
+ + Compliant
+
+ +
+
ntp.network.ntp_support
+
Device sent NTPv4 packets
+ +
+ + Compliant
+
+ +
+
ntp.network.ntp_dhcp
+
Device sent NTP request to non-DHCP provided server
+ +
+ + Feature Not Detected
+
+ +
+ +
+
+ + + + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +

Steps to Resolve

+ +
+
+ 1. +
+ Name
dns.network.hostname_resolution +
+
+ Description
No DNS traffic detected from the device +
+
+
+ Steps to resolve + +
1. Install a supported DNS client + +
2. Ensure DNS servers have been set correctly + +
3. Ensure the gateway IP has been set and the device has internet access + +
+
+ + +
+ + + + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

DNS Module

+ + + + + + + + + + + + + + + + +
Requests to local DNS serverRequests to external DNS serversTotal DNS requestsTotal DNS responses
0000
+ +
+
+ No DNS traffic detected from the device +
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

Services Module

+ + + + + + + + + + + + + + +
TCP ports openUDP ports openTotal ports open
101
+ + + + + + + + + + + + + + + + + + +
PortStateServiceVersion
22/tcpopenssh9.7 protocol 2.0
+ + +
+ +
+
+ + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

NTP Module

+ + + + + + + + + + + + + + + + + +
Requests to local NTP serverRequests to external NTP serversTotal NTP requestsTotal NTP responses
0111
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SourceDestinationTypeVersionCountSync Request Average
10.10.10.14195.46.37.22Client410.000 seconds
195.46.37.2210.10.10.14Server41N/A
+ + +
+ +
+
+ + + +
+ + +
+
+ +

+ + + Device Qualification + +

+

Device profile

+
+

+ dell + wyse +

+ + Testrun +
+ +
+
+
Question
+
Answer
+
+ +
+
1.
+
What type of device is this?
+
+ + IoT Gateway + +
+
+ +
+
2.
+
Please select the technology this device falls into
+
+ + Hardware - Air quality + +
+
+ +
+
3.
+
Does your device process any sensitive information?
+
+ + No + +
+
+ +
+
4.
+
Can all non-essential services be disabled on your device?
+
+ + Yes + +
+
+ +
+
5.
+
Is there a second IP port on the device?
+
+ + No + +
+
+ +
+
6.
+
Can the second IP port on your device be disabled?
+
+ + No + +
+
+ +
+ +
+
+ + + + \ No newline at end of file diff --git a/resources/report/header_macros.jinja b/resources/report/header_macros.jinja new file mode 100644 index 000000000..ebda1f51d --- /dev/null +++ b/resources/report/header_macros.jinja @@ -0,0 +1,43 @@ +{% macro header(is_first, title, json_data, device, logo, icon_qualification, icon_pilot) %} +{% if is_first %} +
+
+ {# Badge #} +

+ {% if json_data['device']['test_pack'] == 'Device Qualification' %} + + Device Qualification + {% else %} + + Pilot Assessment + {% endif %} +

+

{{ title }}

+
+

+ {{ device['manufacturer'] }} + {{ device['model']}} +

+ {% else %} +
+
+ {# Badge #} +

+ {% if json_data['device']['test_pack'] == 'Device Qualification' %} + + Device Qualification + {% else %} + + Pilot Assessment + {% endif %} +

+

{{ title }}

+
+

+ {{ device['manufacturer'] }} + {{ device['model']}} +

+ {% endif %} + Testrun +
+{% endmacro %} \ No newline at end of file diff --git a/resources/report/pilot-report-example.html b/resources/report/pilot-report-example.html deleted file mode 100644 index deb1b40fb..000000000 --- a/resources/report/pilot-report-example.html +++ /dev/null @@ -1,982 +0,0 @@ - - - - - - - - Testrun Report - - - - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- - Testrun -
- -
-
-
-

Manufacturer

-
dell
-
-

Model

-
wyse
-
-

Firmware

-
123
-
-

MAC Address

-
f0:d4:e2:f2:f5:41
-
-
-
-
-

Device Configuration

-
- -
- - - - Protocol -
- -
- - - - Connection -
- -
- - - - TLS -
- -
- - - - DNS -
- -
- - - - Services -
- -
- - - - NTP -
- -
- -
- -
Test Status
-
Complete
-
Test Result
-
Non-Compliant
-
Started
-
2024-09-17 15:16:21
-
Duration
-
0:11:08
-
-
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
protocol.valid_bacnet
-
BACnet device could not be discovered
- -
- - Feature Not Detected
-
- -
-
protocol.bacnet.version
-
Device did not respond to BACnet discovery
- -
- - Feature Not Detected
-
- -
-
protocol.valid_modbus
-
Device did not respond to Modbus connection
- -
- - Feature Not Detected
-
- -
-
connection.port_link
-
Port stats not available
- -
- - Error
-
- -
-
connection.port_speed
-
Interface not configured for auto-negotiation
- -
- - Non-Compliant
-
- -
-
connection.port_duplex
-
Interface not configured for auto-negotiation
- -
- - Non-Compliant
-
- -
-
connection.switch.arp_inspection
-
Device uses ARP
- -
- - Compliant
-
- -
-
connection.switch.dhcp_snooping
-
Device does not act as a DHCP server
- -
- - Compliant
-
- -
-
connection.dhcp_address
-
Device responded to leased ip address
- -
- - Compliant
-
- -
-
connection.mac_address
-
MAC address found: f0:d4:e2:f2:f5:41
- -
- - Compliant
-
- -
-
connection.mac_oui
-
OUI Manufacturer found: Dell Inc.
- -
- - Compliant
-
- -
- -
-
- - -
- -
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- - Testrun -
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
connection.private_address
-
All subnets are supported
- -
- - Compliant
-
- -
-
connection.shared_address
-
All subnets are supported
- -
- - Compliant
-
- -
-
connection.dhcp_disconnect
-
Device received a DHCP lease after disconnect
- -
- - Compliant
-
- -
-
connection.dhcp_disconnect_ip_change
-
Device received expected IP address after disconnect
- -
- - Compliant
-
- -
-
connection.single_ip
-
Device is using a single IP address
- -
- - Compliant
-
- -
-
connection.target_ping
-
Device responds to ping
- -
- - Compliant
-
- -
-
connection.ipaddr.ip_change
-
Device has accepted an IP address change
- -
- - Compliant
-
- -
-
connection.ipaddr.dhcp_failover
-
Device has no current DHCP lease
- -
- - Error
-
- -
-
connection.ipv6_slaac
-
Device has formed SLAAC address fd10:77be:4186:0:f2d4:e2ff:fef2:f541
- -
- - Compliant
-
- -
-
connection.ipv6_ping
-
Device responds to IPv6 ping on fd10:77be:4186:0:f2d4:e2ff:fef2:f541
- -
- - Compliant
-
- -
-
security.tls.v1_2_server
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_2_client
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_3_server
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_3_client
-
Could not resolve device IP address
- -
- - Error
-
- -
-
dns.network.hostname_resolution
-
No DNS traffic detected from the device
- -
- - Non-Compliant
-
- -
-
dns.network.from_dhcp
-
No DNS traffic detected from the device
- -
- - Informational
-
- -
-
dns.mdns
-
No MDNS traffic detected from the device
- -
- - Informational
-
- -
-
security.services.ftp
-
No FTP server found
- -
- - Compliant
-
- -
-
security.ssh.version
-
No SSH server found
- -
- - Compliant
-
- -
-
security.services.telnet
-
No telnet server found
- -
- - Compliant
-
- -
- -
-
- - -
- -
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- - Testrun -
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
security.services.smtp
-
No SMTP server found
- -
- - Compliant
-
- -
-
security.services.http
-
No HTTP server found
- -
- - Compliant
-
- -
-
security.services.pop
-
No POP server found
- -
- - Compliant
-
- -
-
security.services.imap
-
No IMAP server found
- -
- - Compliant
-
- -
-
security.services.snmpv3
-
No SNMP server found
- -
- - Compliant
-
- -
-
security.services.vnc
-
No VNC server found
- -
- - Compliant
-
- -
-
security.services.tftp
-
No TFTP server found
- -
- - Compliant
-
- -
-
ntp.network.ntp_server
-
No NTP server found
- -
- - Compliant
-
- -
-
ntp.network.ntp_support
-
Device has not sent any NTP requests
- -
- - Non-Compliant
-
- -
-
ntp.network.ntp_dhcp
-
Device has not sent any NTP requests
- -
- - Feature Not Detected
-
- -
- -
-
- - - - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- Testrun -
-

Steps to Resolve

- -
-
- 1. -
- Name
dns.network.hostname_resolution -
-
- Description
No DNS traffic detected from the device -
-
-
- Steps to resolve - -
1. Install a supported DNS client - -
2. Ensure DNS servers have been set correctly - -
3. Ensure the gateway IP has been set and the device has internet access - -
-
- -
-
- 2. -
- Name
ntp.network.ntp_support -
-
- Description
Device has not sent any NTP requests -
-
-
- Steps to resolve - -
1. Set the NTP version to v4 in the NTP client - -
2. Install an NTP client that supports NTPv4 - -
-
- - -
- - - - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

DNS Module

- - - - - - - - - - - - - - - - -
Requests to local DNS serverRequests to external DNS serversTotal DNS requestsTotal DNS responses
0000
- -
-
- No DNS traffic detected from the device -
- -
- -
-
- - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

Services Module

- - - - - - - - - - - - - - -
TCP ports openUDP ports openTotal ports open
000
- -
-
- No open ports detected -
- -
- -
-
- - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

NTP Module

- - - - - - - - - - - - - - - - - -
Requests to local NTP serverRequests to external NTP serversTotal NTP requestsTotal NTP responses
0000
- -
-
- No NTP traffic detected from the device -
- -
- -
-
- - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Device profile

-
-

- dell - wyse -

- Testrun -
-
-
-
Question
-
Answer
-
- -
-
1.
-
What type of device do you need reviewed?
-
- - Robotic arm for loading and unloading dishwashers -
-
-
-
2.
-
What features does the device have?
-
- -
    - -
  • Wi-Fi
  • -
  • ZigBee / Z-Wave / Thread / Matter
  • -
-
-
-
- -
-
- - - - -
-
-
- - -

- - Pilot Assessment -

- - - - - -

Testrun report

-
-

- dell - wyse -

- Testrun -
- -
-

Attention

-

- The following recommendations are required solely for full device qualification. - They are optional for the pilot assessment. - But you may find it valuable to understand what will be required in the future - and our recommendations for your device. -

-
- -
-
- 1. -
- Name
security.services.ftp -
-
- Description
FTP Server Security Error -
-
-
- Steps to resolve - -
1. Install a supported DNS client - -
2. Ensure DNS servers have been set correctly - -
3. Ensure the gateway IP has been set and the device has internet access - -
-
- -
-
- 2. -
- Name
ntp.network.ntp_support -
-
- Description
Device has not sent any NTP requests -
-
-
- Steps to resolve - -
1. Set the NTP version to v4 in the NTP client - -
2. Install an NTP client that supports NTPv4 - -
-
- -
-
- - - \ No newline at end of file diff --git a/resources/report/pilot_report_example.html b/resources/report/pilot_report_example.html new file mode 100644 index 000000000..0dbd987c6 --- /dev/null +++ b/resources/report/pilot_report_example.html @@ -0,0 +1,1587 @@ + + + + + + + + Testrun Report + + + + + + + + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + +
+
+
+

Manufacturer

+
dell
+
+

Model

+
wyse
+
+

Firmware

+
123
+
+

MAC Address

+
f0:d4:e2:f2:f5:41
+
+
+
+
+

Device Configuration

+
+ +
+ + + + Protocol +
+ +
+ + + + Connection +
+ +
+ + + + TLS +
+ +
+ + + + DNS +
+ +
+ + + + Services +
+ +
+ + + + NTP +
+ +
+ +
+ +
Test Status
+
Complete
+
Test Result
+
Compliant
+
Started
+
2024-10-01 15:35:44
+
Duration
+
0:09:54
+
+
+ + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
protocol.valid_bacnet
+
BACnet device could not be discovered
+ +
+ + Feature Not Detected
+
+ +
+
protocol.bacnet.version
+
Device did not respond to BACnet discovery
+ +
+ + Feature Not Detected
+
+ +
+
protocol.valid_modbus
+
Device did not respond to Modbus connection
+ +
+ + Feature Not Detected
+
+ +
+
connection.port_link
+
Port stats not available
+ +
+ + Error
+
+ +
+
connection.port_speed
+
Succesfully auto-negotiated speeds above 10 Mbps
+ +
+ + Informational
+
+ +
+
connection.port_duplex
+
Succesfully auto-negotiated full duplex
+ +
+ + Informational
+
+ +
+
connection.switch.arp_inspection
+
Device uses ARP
+ +
+ + Informational
+
+ +
+
connection.switch.dhcp_snooping
+
Device does not act as a DHCP server
+ +
+ + Informational
+
+ +
+
connection.dhcp_address
+
Device responded to leased ip address
+ +
+ + Compliant
+
+ +
+
connection.mac_address
+
MAC address found: f0:d4:e2:f2:f5:41
+ +
+ + Compliant
+
+ +
+
connection.mac_oui
+
OUI Manufacturer found: Dell Inc.
+ +
+ + Informational
+
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
connection.private_address
+
All subnets are supported
+ +
+ + Informational
+
+ +
+
connection.shared_address
+
All subnets are supported
+ +
+ + Informational
+
+ +
+
connection.dhcp_disconnect
+
Device received a DHCP lease after disconnect
+ +
+ + Informational
+
+ +
+
connection.dhcp_disconnect_ip_change
+
Device received expected IP address after disconnect
+ +
+ + Informational
+
+ +
+
connection.single_ip
+
Device is using a single IP address
+ +
+ + Informational
+
+ +
+
connection.target_ping
+
Device responds to ping
+ +
+ + Informational
+
+ +
+
connection.ipaddr.ip_change
+
Device has accepted an IP address change
+ +
+ + Informational
+
+ +
+
connection.ipaddr.dhcp_failover
+
Secondary DHCP server lease confirmed active in device
+ +
+ + Informational
+
+ +
+
connection.ipv6_slaac
+
Device has formed SLAAC address fd10:77be:4186:0:f2d4:e2ff:fef2:f541
+ +
+ + Informational
+
+ +
+
connection.ipv6_ping
+
Device responds to IPv6 ping on fd10:77be:4186:0:f2d4:e2ff:fef2:f541
+ +
+ + Informational
+
+ +
+
security.tls.v1_2_server
+
TLS 1.2 certificate could not be validated
+ +
+ + Error
+
+ +
+
security.tls.v1_2_client
+
No outbound connections were found
+ +
+ + Feature Not Detected
+
+ +
+
security.tls.v1_3_server
+
TLS 1.3 certificate could not be validated
+ +
+ + Error
+
+ +
+
security.tls.v1_3_client
+
No outbound connections were found
+ +
+ + Feature Not Detected
+
+ +
+
dns.network.hostname_resolution
+
No DNS traffic detected from the device
+ +
+ + Informational
+
+ +
+
dns.network.from_dhcp
+
No DNS traffic detected from the device
+ +
+ + Informational
+
+ +
+
dns.mdns
+
No MDNS traffic detected from the device
+ +
+ + Informational
+
+ +
+
security.services.ftp
+
No FTP server found
+ +
+ + Informational
+
+ +
+
security.ssh.version
+
SSH server found running 9.7 protocol 2.0
+ +
+ + Informational
+
+ +
+
security.services.telnet
+
No telnet server found
+ +
+ + Informational
+
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ + + + + + +
+

Results List (38/41)

+
+
Name
+
Description
+
Result
+
+ +
+
security.services.smtp
+
No SMTP server found
+ +
+ + Informational
+
+ +
+
security.services.http
+
No HTTP server found
+ +
+ + Informational
+
+ +
+
security.services.pop
+
No POP server found
+ +
+ + Informational
+
+ +
+
security.services.imap
+
No IMAP server found
+ +
+ + Informational
+
+ +
+
security.services.snmpv3
+
No SNMP server found
+ +
+ + Informational
+
+ +
+
security.services.vnc
+
No VNC server found
+ +
+ + Informational
+
+ +
+
security.services.tftp
+
No TFTP server found
+ +
+ + Informational
+
+ +
+
ntp.network.ntp_server
+
No NTP server found
+ +
+ + Informational
+
+ +
+
ntp.network.ntp_support
+
Device sent NTPv4 packets
+ +
+ + Informational
+
+ +
+
ntp.network.ntp_dhcp
+
Device sent NTP request to non-DHCP provided server
+ +
+ + Feature Not Detected
+
+ +
+ +
+
+ + + + + + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

DNS Module

+ + + + + + + + + + + + + + + + +
Requests to local DNS serverRequests to external DNS serversTotal DNS requestsTotal DNS responses
0000
+ +
+
+ No DNS traffic detected from the device +
+ +
+ +
+
+ + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

Services Module

+ + + + + + + + + + + + + + +
TCP ports openUDP ports openTotal ports open
101
+ + + + + + + + + + + + + + + + + + +
PortStateServiceVersion
22/tcpopenssh9.7 protocol 2.0
+ + +
+ +
+
+ + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

NTP Module

+ + + + + + + + + + + + + + + + + +
Requests to local NTP serverRequests to external NTP serversTotal NTP requestsTotal NTP responses
0111
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SourceDestinationTypeVersionCountSync Request Average
10.10.10.15195.46.37.22Client410.000 seconds
195.46.37.2210.10.10.15Server41N/A
+ + +
+ +
+
+ + + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Device profile

+
+

+ dell + wyse +

+ + Testrun +
+ +
+
+
Question
+
Answer
+
+ +
+
1.
+
What type of device is this?
+
+ + IoT Gateway + +
+
+ +
+
2.
+
Please select the technology this device falls into
+
+ + Hardware - Air quality + +
+
+ +
+
3.
+
Does your device process any sensitive information?
+
+ + No + +
+
+ +
+
4.
+
Can all non-essential services be disabled on your device?
+
+ + Yes + +
+
+ +
+
5.
+
Is there a second IP port on the device?
+
+ + No + +
+
+ +
+
6.
+
Can the second IP port on your device be disabled?
+
+ + No + +
+
+ +
+ +
+
+ + + +
+ + +
+
+ +

+ + + Pilot Assessment + +

+

Testrun report

+
+

+ dell + wyse +

+ + Testrun +
+ +
+

Attention

+

+ The following recommendations are required solely for full device qualification. + They are optional for the pilot assessment. + But you may find it valuable to understand what will be required in the future + and our recommendations for your device. +

+
+ +
+
+ + 1. + +
+ Name
+ dns.network.hostname_resolution +
+
+ Description
+ No DNS traffic detected from the device +
+
+
+ Steps to resolve + +
+ + 1. Install a supported DNS client + + +
+ + 2. Ensure DNS servers have been set correctly + + +
+ + 3. Ensure the gateway IP has been set and the device has internet access + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/resources/report/qualification-report-example.html b/resources/report/qualification-report-example.html deleted file mode 100644 index f99cdfb5c..000000000 --- a/resources/report/qualification-report-example.html +++ /dev/null @@ -1,898 +0,0 @@ - - - - - - - - Testrun Report - - - - -
- -
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- - Testrun -
- -
-
-
-

Manufacturer

-
dell
-
-

Model

-
wyse
-
-

Firmware

-
123
-
-

MAC Address

-
f0:d4:e2:f2:f5:41
-
-
-
-
-

Device Configuration

-
- -
- - - - Protocol -
- -
- - - - Connection -
- -
- - - - TLS -
- -
- - - - DNS -
- -
- - - - Services -
- -
- - - - NTP -
- -
- -
- -
Test Status
-
Complete
-
Test Result
-
Non-Compliant
-
Started
-
2024-09-17 15:16:21
-
Duration
-
0:11:08
-
-
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
protocol.valid_bacnet
-
BACnet device could not be discovered
- -
- - Feature Not Detected
-
- -
-
protocol.bacnet.version
-
Device did not respond to BACnet discovery
- -
- - Feature Not Detected
-
- -
-
protocol.valid_modbus
-
Device did not respond to Modbus connection
- -
- - Feature Not Detected
-
- -
-
connection.port_link
-
Port stats not available
- -
- - Error
-
- -
-
connection.port_speed
-
Interface not configured for auto-negotiation
- -
- - Non-Compliant
-
- -
-
connection.port_duplex
-
Interface not configured for auto-negotiation
- -
- - Non-Compliant
-
- -
-
connection.switch.arp_inspection
-
Device uses ARP
- -
- - Compliant
-
- -
-
connection.switch.dhcp_snooping
-
Device does not act as a DHCP server
- -
- - Compliant
-
- -
-
connection.dhcp_address
-
Device responded to leased ip address
- -
- - Compliant
-
- -
-
connection.mac_address
-
MAC address found: f0:d4:e2:f2:f5:41
- -
- - Compliant
-
- -
-
connection.mac_oui
-
OUI Manufacturer found: Dell Inc.
- -
- - Compliant
-
- -
- -
-
- - -
- -
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- - Testrun -
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
connection.private_address
-
All subnets are supported
- -
- - Compliant
-
- -
-
connection.shared_address
-
All subnets are supported
- -
- - Compliant
-
- -
-
connection.dhcp_disconnect
-
Device received a DHCP lease after disconnect
- -
- - Compliant
-
- -
-
connection.dhcp_disconnect_ip_change
-
Device received expected IP address after disconnect
- -
- - Compliant
-
- -
-
connection.single_ip
-
Device is using a single IP address
- -
- - Compliant
-
- -
-
connection.target_ping
-
Device responds to ping
- -
- - Compliant
-
- -
-
connection.ipaddr.ip_change
-
Device has accepted an IP address change
- -
- - Compliant
-
- -
-
connection.ipaddr.dhcp_failover
-
Device has no current DHCP lease
- -
- - Error
-
- -
-
connection.ipv6_slaac
-
Device has formed SLAAC address fd10:77be:4186:0:f2d4:e2ff:fef2:f541
- -
- - Compliant
-
- -
-
connection.ipv6_ping
-
Device responds to IPv6 ping on fd10:77be:4186:0:f2d4:e2ff:fef2:f541
- -
- - Compliant
-
- -
-
security.tls.v1_2_server
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_2_client
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_3_server
-
Could not resolve device IP address
- -
- - Error
-
- -
-
security.tls.v1_3_client
-
Could not resolve device IP address
- -
- - Error
-
- -
-
dns.network.hostname_resolution
-
No DNS traffic detected from the device
- -
- - Non-Compliant
-
- -
-
dns.network.from_dhcp
-
No DNS traffic detected from the device
- -
- - Informational
-
- -
-
dns.mdns
-
No MDNS traffic detected from the device
- -
- - Informational
-
- -
-
security.services.ftp
-
No FTP server found
- -
- - Compliant
-
- -
-
security.ssh.version
-
No SSH server found
- -
- - Compliant
-
- -
-
security.services.telnet
-
No telnet server found
- -
- - Compliant
-
- -
- -
-
- - -
- -
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- - Testrun -
- - - - - -
-

Results List (35/41)

-
-
Name
-
Description
-
Result
-
- -
-
security.services.smtp
-
No SMTP server found
- -
- - Compliant
-
- -
-
security.services.http
-
No HTTP server found
- -
- - Compliant
-
- -
-
security.services.pop
-
No POP server found
- -
- - Compliant
-
- -
-
security.services.imap
-
No IMAP server found
- -
- - Compliant
-
- -
-
security.services.snmpv3
-
No SNMP server found
- -
- - Compliant
-
- -
-
security.services.vnc
-
No VNC server found
- -
- - Compliant
-
- -
-
security.services.tftp
-
No TFTP server found
- -
- - Compliant
-
- -
-
ntp.network.ntp_server
-
No NTP server found
- -
- - Compliant
-
- -
-
ntp.network.ntp_support
-
Device has not sent any NTP requests
- -
- - Non-Compliant
-
- -
-
ntp.network.ntp_dhcp
-
Device has not sent any NTP requests
- -
- - Feature Not Detected
-
- -
- -
-
- - - - -
-
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- Testrun -
-

Steps to Resolve

- -
-
- 1. -
- Name
dns.network.hostname_resolution -
-
- Description
No DNS traffic detected from the device -
-
-
- Steps to resolve - -
1. Install a supported DNS client - -
2. Ensure DNS servers have been set correctly - -
3. Ensure the gateway IP has been set and the device has internet access - -
-
- -
-
- 2. -
- Name
ntp.network.ntp_support -
-
- Description
Device has not sent any NTP requests -
-
-
- Steps to resolve - -
1. Set the NTP version to v4 in the NTP client - -
2. Install an NTP client that supports NTPv4 - -
-
- - -
- - - - -
-
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

DNS Module

- - - - - - - - - - - - - - - - -
Requests to local DNS serverRequests to external DNS serversTotal DNS requestsTotal DNS responses
0000
- -
-
- No DNS traffic detected from the device -
- -
- -
-
- - -
-
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

Services Module

- - - - - - - - - - - - - - -
TCP ports openUDP ports openTotal ports open
000
- -
-
- No open ports detected -
- -
- -
-
- - -
-
-
- - - - - - - -

- - Device Qualification -

-

Testrun report

-
-

- dell - wyse -

- Testrun -
-
-

NTP Module

- - - - - - - - - - - - - - - - - -
Requests to local NTP serverRequests to external NTP serversTotal NTP requestsTotal NTP responses
0000
- -
-
- No NTP traffic detected from the device -
- -
- -
-
- - -
-
-
- - - - - - - -

- - Device Qualification -

-

Device profile

-
-

- dell - wyse -

- Testrun -
-
-
-
Question
-
Answer
-
- -
-
1.
-
What type of device do you need reviewed?
-
- - Robotic arm for loading and unloading dishwashers -
-
-
-
2.
-
What features does the device have?
-
- -
    - -
  • Wi-Fi
  • -
  • ZigBee / Z-Wave / Thread / Matter
  • -
-
-
-
- -
-
- - \ No newline at end of file diff --git a/resources/report/test_report_styles.css b/resources/report/test_report_styles.css index dbb0a8f7c..25775555a 100644 --- a/resources/report/test_report_styles.css +++ b/resources/report/test_report_styles.css @@ -69,7 +69,6 @@ display: flex; align-items: center; margin-bottom: 8px; - gap: 8px; color: #202124; font-size: 9px; text-transform: uppercase; @@ -77,7 +76,14 @@ .first-page .header-info { font-size: 18px; - gap: 16px; + } + + .header-info .header-info-badge { + margin-right: 8px; + } + + .first-page .header-info .header-info-badge { + margin-right: 16px; } .header-info-badge { @@ -89,17 +95,20 @@ border-radius: 4px; font-weight: 500; letter-spacing: 0.64px; - gap: 10px; + box-sizing: border-box; + min-width: 132px; } .first-page .header-info-badge { padding: 15px 30px; letter-spacing: 1px; + min-width: 243px; } .header-info-badge img { width: 9px; height: 9px; + margin-right: 10px; } .first-page .header-info-badge img { diff --git a/resources/report/test_report_template.html b/resources/report/test_report_template.html index fedbd1aee..af3c25ed9 100644 --- a/resources/report/test_report_template.html +++ b/resources/report/test_report_template.html @@ -1,4 +1,4 @@ - +{% import 'header_macros.jinja' as header_macros %} @@ -15,23 +15,7 @@ {% for page in range(pages_num) %} {% set page_index.value = page_index.value+1 %}
- {% if loop.first %} -
-

Testrun report

-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- {% else %} -
-

Testrun report

-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- {% endif %} - Testrun -
+ {{ header_macros.header(loop.first, "Testrun report", json_data, device, logo, icon_qualification, icon_pilot)}} {% if loop.first %}
@@ -122,18 +106,11 @@

Results List ({{ successful_tests }}/{{ total_tests }})

{% endfor %} - {# Steps to resolve #} - {% if steps_to_resolve|length > 0 %} + {# Steps to resolve Device qualification #} + {% if steps_to_resolve|length > 0 and json_data['device']['test_pack'] == 'Device Qualification' %} {% set page_index.value = page_index.value+1 %}
-
-

Testrun report

-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
+ {{ header_macros.header(False, "Testrun report", json_data, device, logo, icon_qualification, icon_pilot)}}

Steps to Resolve

{% for step in steps_to_resolve %}
@@ -164,14 +141,7 @@

Steps to Resolve

{% for module in module_reports %} {% set page_index.value = page_index.value+1 %}
-
-

Testrun report

-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
+ {{ header_macros.header(False, "Testrun report", json_data, device, logo, icon_qualification, icon_pilot)}}
{{ module }}
@@ -182,5 +152,84 @@

{% endfor %} + {# Device profile #} + {% set page_index.value = page_index.value+1 %} +
+ {{ header_macros.header(False, "Device profile", json_data, device, logo, icon_qualification, icon_pilot)}} +
+
+
Question
+
Answer
+
+ {% for question in json_data['device']['device_profile'] %} +
+
{{loop.index}}.
+
{{ question['question'] }}
+
+ {% if question['answer'] is string %} + {{ question['answer'] }} + {% elif question['answer'] is sequence %} +
    + {% for answer in question['answer'] %} +
  • {{ answer }}
  • + {% endfor %} +
+ {% endif %} +
+
+ {% endfor %} +
+ +
+
+ {# Pilot steps to resolve#} + {% if json_data['device']['test_pack'] == 'Pilot Assessment' and optional_steps_to_resolve|length > 0 %} + {% set page_index.value = page_index.value + 1 %} +
+ {{ header_macros.header(False, "Testrun report", json_data, device, logo, icon_qualification, icon_pilot)}} +
+

Attention

+

+ The following recommendations are required solely for full device qualification. + They are optional for the pilot assessment. + But you may find it valuable to understand what will be required in the future + and our recommendations for your device. +

+
+ {% for step in optional_steps_to_resolve %} +
+
+ + {{ loop.index }}. + +
+ Name
+ {{ step['name'] }} +
+
+ Description
+ {{ step["description"] }} +
+
+
+ Steps to resolve + {% for recommedtation in step['optional_recommendations'] %} +
+ + {{ loop.index }}. {{ recommedtation }} + + {% endfor %} +
+
+ {% endfor %} + +
+ {% endif %} diff --git a/resources/report/test_report_template_new.html b/resources/report/test_report_template_new.html deleted file mode 100644 index 244081a68..000000000 --- a/resources/report/test_report_template_new.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - Testrun Report - - - - - {% set page_index = namespace(value=0) %} - {# Test Results #} - {% for page in range(pages_num) %} - {% set page_index.value = page_index.value+1 %} -
- {% if loop.first %} -
-
- -

- - - - - - -

-

Testrun report

-
-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- {% else %} -
-
- -

- - - - - - -

-

Testrun report

-
-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- {% endif %} - Testrun -
- {% if loop.first %} -
-
-
-

Manufacturer

-
{{ device['manufacturer']}}
-
-

Model

-
{{ device['model'] }}
-
-

Firmware

-
{{ device['firmware']}}
-
-

MAC Address

-
{{ device['mac_addr'] }}
-
-
-
-
-

Device Configuration

-
- {% for module, enabled in modules.items() %} -
- {% if enabled %} - - {% else %} - - {% endif %} - {{ module }} -
- {% endfor %} -
- {% if test_status == 'Compliant' %} -
- {% else %} -
- {% endif %} -
Test Status
-
Complete
-
Test Result
-
{{ test_status }}
-
Started
-
{{ json_data['started']}}
-
Duration
-
{{ duration }}
-
-
- {% endif %} - {% if loop.first %} - {% set results_from = 0 %} - {% set results_to = [tests_first_page, test_results|length]|min %} - {% else %} - {% set results_from = tests_first_page + (loop.index0 - 1) * tests_per_page %} - {% set results_to = [results_from + tests_per_page, test_results|length]|min %} - {% endif %} -
-

Results List ({{ successful_tests }}/{{ total_tests }})

-
-
Name
-
Description
-
Result
-
- {% for i in range(results_from, results_to) %} -
-
{{ test_results[i]['name'] }}
-
{{ test_results[i]['description'] }}
- {% if test_results[i]['result'] == 'Non-Compliant' %} -
- {% elif test_results[i]['result'] == 'Compliant' %} -
- {% elif test_results[i]['result'] == 'Error' %} -
- {% elif test_results[i]['result'] == 'Feature Not Detected' %} -
- {% elif test_results[i]['result'] == 'Informational' %} -
- {% else %} -
- {% endif %} - {{ test_results[i]['result'] }}
-
- {% endfor %} -
- -
-
- {% endfor %} - {# Steps to resolve #} - {% if steps_to_resolve|length > 0 %} - {% set page_index.value = page_index.value+1 %} -
-
-
- -

- - - - - - -

-

Testrun report

-
-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
-

Steps to Resolve

- {% for step in steps_to_resolve %} -
-
- {{ loop.index }}. -
- Name
{{ step['name'] }} -
-
- Description
{{ step["description"] }} -
-
-
- Steps to resolve - {% for recommedtation in step['recommendations'] %} -
{{ loop.index }}. {{ recommedtation }} - {% endfor %} -
-
- {% endfor %} - -
- {% endif %} - {# Modules reports #} - {% for module in module_reports %} - {% set page_index.value = page_index.value+1 %} -
-
-
- -

- - - - - - -

-

Testrun report

-
-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
-
- {{ module }} -
- -
-
- {% endfor %} - - - -
-
-
- -

- - - - - - -

-

Device profile

-
-

- { device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
-
-
-
Question
-
Answer
-
- -
-
- -
-
- -
-
- - - -
    - -
  • - -
  • - -
-
-
-
- -
-
- - - - - - - - -
-
-
- -

- - - - - - -

-

Testrun report

-
-

- {{ device['manufacturer'] }} - {{ device['model']}} -

- Testrun -
-
-

Attention

-

- The following recommendations are required solely for full device qualification. - They are optional for the pilot assessment. - But you may find it valuable to understand what will be required in the future - and our recommendations for your device. -

-
- -
-
- - - -
- Name
- -
-
- Description
- -
-
-
- Steps to resolve - -
- - - - -
-
- - -
- - -