diff options
Diffstat (limited to 'tests')
22 files changed, 1715 insertions, 25 deletions
diff --git a/tests/data/benchmarks/plan/compute.yaml b/tests/data/benchmarks/plan/compute.yaml index 8529d8dc..f4a7a2dc 100644 --- a/tests/data/benchmarks/plan/compute.yaml +++ b/tests/data/benchmarks/plan/compute.yaml @@ -16,6 +16,80 @@ config: collectors: - type: logfile paths: + - '../../external/dpi/' + logs: + - filename: dpi_dump.txt + parsers: + - type: grep + regex: |- + ^\s+nDPI throughput:.+?(?P<pps>\d+.\d+)\sM\spps.+ + ?(?P<bps>\d+.\d+)\sGb\/sec + - type: logfile + paths: + - '../../external/ramspeed/' + logs: + - filename: Intmem + parsers: + - type: grep + regex: '^INTEGER\s+BatchRun\s+Copy:\s+?(?P<integer_copy>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^INTEGER\s+BatchRun\s+Scale:\s+?(?P<integer_scale>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^INTEGER\s+BatchRun\s+Add:\s+?(?P<integer_add>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^INTEGER\s+BatchRun\s+Triad:\s+?(?P<integer_triad>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^INTEGER\s+BatchRun\s+AVERAGE:\s+?(?P<integer_average>\d+\.\d+)\sMB/s$' + - filename: Floatmem + parsers: + - type: grep + regex: '^FL-POINT\s+BatchRun\s+Copy:\s+?(?P<float_copy>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^FL-POINT\s+BatchRun\s+Scale:\s+?(?P<float_scale>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^FL-POINT\s+BatchRun\s+Add:\s+?(?P<float_add>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^FL-POINT\s+BatchRun\s+Triad:\s+?(?P<float_triad>\d+\.\d+)\sMB/s$' + - type: grep + regex: '^FL-POINT\s+BatchRun\s+AVERAGE:\s+?(?P<float_average>\d+\.\d+)\sMB/s$' + - type: logfile + paths: + - '../../external/ssl/' + logs: + - filename: RSA_dump + parsers: + - type: grep + regex: |- + ^rsa\s+512\sbits\s.+ + ?(?P<rsa_sign_512>\d+\.\d)\s+ + ?(?P<rsa_verify_512>\d+\.\d)$ + - type: grep + regex: |- + ^rsa\s+1024\sbits\s.+ + ?(?P<rsa_sign_1024>\d+\.\d)\s+ + ?(?P<rsa_verify_1024>\d+\.\d)$ + - type: grep + regex: |- + ^rsa\s+2048\sbits\s.+ + ?(?P<rsa_sign_2048>\d+\.\d)\s+ + ?(?P<rsa_verify_2048>\d+\.\d)$ + - type: grep + regex: |- + ^rsa\s+4096\sbits\s.+ + ?(?P<rsa_sign_4096>\d+\.\d)\s+ + ?(?P<rsa_verify_4096>\d+\.\d)$ + - filename: AES-128-CBC_dump + parsers: + - type: grep + regex: |- + ^aes-128-cbc\s+ + ?(?P<aes_128_cbc_16_bytes>\d+\.\w+)\s+ + ?(?P<aes_128_cbc_64_bytes>\d+\.\w+)\s+ + ?(?P<aes_128_cbc_256_bytes>\d+\.\w+)\s+ + ?(?P<aes_128_cbc_1024_bytes>\d+\.\w+)\s+ + ?(?P<aes_128_cbc_8192_bytes>\d+\.\w+)$ + - type: logfile + paths: - '../../external/sysinfo' logs: - filename: top.log diff --git a/tests/data/benchmarks/plan/sample.yaml b/tests/data/benchmarks/plan/sample.yaml new file mode 100644 index 00000000..04e8caf9 --- /dev/null +++ b/tests/data/benchmarks/plan/sample.yaml @@ -0,0 +1,14 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +name: sample +description: sample benchmark plan for testing default path +config: + collectors: [] + reporters: [] +QPIs: [] diff --git a/tests/data/external/dpi/dpi_dump.txt b/tests/data/external/dpi/dpi_dump.txt new file mode 100644 index 00000000..1f4e2839 --- /dev/null +++ b/tests/data/external/dpi/dpi_dump.txt @@ -0,0 +1,809 @@ +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.56 M pps / 14.62 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.31 M pps / 12.31 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.54 M pps / 14.45 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.35 M pps / 12.71 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.55 M pps / 14.53 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.32 M pps / 12.42 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.54 M pps / 14.46 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.54 M pps / 14.49 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.37 M pps / 12.89 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes + +----------------------------------------------------------- +* NOTE: This is demo app to show *some* nDPI features. +* In this demo we have implemented only some basic features +* just to show you what you can do with the library. Feel +* free to extend it and send us the patches for inclusion +------------------------------------------------------------ + +Using nDPI (1.8.0-dev-707-6a27b62) [1 thread(s)] +Reading packets from pcap file test.pcap... +Running thread 0... + +nDPI Memory statistics: + nDPI Memory (once): 110.55 KB + Flow Memory (per flow): 1.95 KB + Actual Memory: 3.46 MB + Peak Memory: 3.46 MB + +Traffic statistics: + Ethernet bytes: 75948198 (includes ethernet CRC/IFC/trailer) + Discarded bytes: 55256 + IP packets: 60265 of 61155 packets total + IP bytes: 74501838 (avg pkt size 1218 bytes) + Unique flows: 545 + TCP Packets: 21188 + UDP Packets: 39042 + VLAN Packets: 0 + MPLS Packets: 0 + PPPoE Packets: 0 + Fragmented Packets: 4 + Max Packet size: 64260 + Packet Len < 64: 30624 + Packet Len 64-128: 1158 + Packet Len 128-256: 674 + Packet Len 256-1024: 817 + Packet Len 1024-1500: 21924 + Packet Len > 1500: 5068 + nDPI throughput: 1.55 M pps / 14.57 Gb/sec + Traffic throughput: 228.03 pps / 2.19 Mb/sec + Traffic duration: 264.290 sec + Guessed flow protos: 9 + + +Detected protocols: + Unknown packets: 6126 bytes: 10913415 flows: 46 + FTP_CONTROL packets: 42 bytes: 4384 flows: 1 + DNS packets: 66 bytes: 6520 flows: 23 + IPP packets: 46 bytes: 12059 flows: 1 + HTTP packets: 377 bytes: 113616 flows: 24 + MDNS packets: 43 bytes: 11742 flows: 9 + NetBIOS packets: 48 bytes: 4754 flows: 12 + SSDP packets: 101 bytes: 32533 flows: 21 + DHCP packets: 21 bytes: 7346 flows: 2 + BitTorrent packets: 37639 bytes: 29656716 flows: 65 + ICMP packets: 15 bytes: 4956 flows: 5 + IGMP packets: 10 bytes: 600 flows: 9 + SSL packets: 1199 bytes: 622508 flows: 24 + ICMPV6 packets: 2 bytes: 172 flows: 2 + DHCPV6 packets: 1 bytes: 144 flows: 1 + Facebook packets: 349 bytes: 206444 flows: 21 + Twitter packets: 137 bytes: 45679 flows: 8 + Dropbox packets: 155 bytes: 45358 flows: 12 + GMail packets: 35 bytes: 10470 flows: 3 + YouTube packets: 11721 bytes: 31050728 flows: 33 + Skype packets: 237 bytes: 35082 flows: 30 + Google packets: 558 bytes: 164639 flows: 52 + WhatsApp packets: 969 bytes: 1477350 flows: 17 + Viber packets: 60 bytes: 27602 flows: 1 + LLMNR packets: 71 bytes: 5297 flows: 36 + Amazon packets: 89 bytes: 23572 flows: 9 + QUIC packets: 41 bytes: 3474 flows: 1 + BJNP packets: 72 bytes: 4320 flows: 72 + Microsoft packets: 35 bytes: 10358 flows: 5 + + +Protocol statistics: + Safe 632978 bytes + Acceptable 31693889 bytes + Fun 31257172 bytes + Unsafe 4384 bytes + Unrated 10913415 bytes
\ No newline at end of file diff --git a/tests/data/external/ramspeed/Floatmem b/tests/data/external/ramspeed/Floatmem new file mode 100644 index 00000000..f3cc1e6d --- /dev/null +++ b/tests/data/external/ramspeed/Floatmem @@ -0,0 +1,52 @@ +RAMspeed/SMP (Linux) v3.5.0 by Rhett M. Hollander and Paul V. Bolotoff, 2002-09 + +8Gb per pass mode, 1 processes + +5-benchmark FLOATmem BatchRun mode + +Benchmark #1: +FL-POINT Copy: 8220.47 MB/s +FL-POINT Scale: 8195.78 MB/s +FL-POINT Add: 10319.18 MB/s +FL-POINT Triad: 10403.87 MB/s +--- +FL-POINT AVERAGE: 9284.83 MB/s + +Benchmark #2: +FL-POINT Copy: 8086.66 MB/s +FL-POINT Scale: 7842.82 MB/s +FL-POINT Add: 9900.13 MB/s +FL-POINT Triad: 10029.43 MB/s +--- +FL-POINT AVERAGE: 8964.76 MB/s + +Benchmark #3: +FL-POINT Copy: 7766.98 MB/s +FL-POINT Scale: 7837.62 MB/s +FL-POINT Add: 9827.57 MB/s +FL-POINT Triad: 9918.89 MB/s +--- +FL-POINT AVERAGE: 8837.77 MB/s + +Benchmark #4: +FL-POINT Copy: 7647.89 MB/s +FL-POINT Scale: 7594.00 MB/s +FL-POINT Add: 9873.93 MB/s +FL-POINT Triad: 9970.89 MB/s +--- +FL-POINT AVERAGE: 8771.68 MB/s + +Benchmark #5: +FL-POINT Copy: 7821.21 MB/s +FL-POINT Scale: 7880.56 MB/s +FL-POINT Add: 9914.84 MB/s +FL-POINT Triad: 10044.05 MB/s +--- +FL-POINT AVERAGE: 8915.17 MB/s + +FL-POINT BatchRun Copy: 7908.64 MB/s +FL-POINT BatchRun Scale: 7870.16 MB/s +FL-POINT BatchRun Add: 9967.13 MB/s +FL-POINT BatchRun Triad: 10073.43 MB/s +--- +FL-POINT BatchRun AVERAGE: 8954.84 MB/s
\ No newline at end of file diff --git a/tests/data/external/ramspeed/Intmem b/tests/data/external/ramspeed/Intmem new file mode 100644 index 00000000..08fffe47 --- /dev/null +++ b/tests/data/external/ramspeed/Intmem @@ -0,0 +1,52 @@ +RAMspeed/SMP (Linux) v3.5.0 by Rhett M. Hollander and Paul V. Bolotoff, 2002-09 + +8Gb per pass mode, 1 processes + +5-benchmark INTmem BatchRun mode + +Benchmark #1: +INTEGER Copy: 11493.80 MB/s +INTEGER Scale: 11527.61 MB/s +INTEGER Add: 11567.60 MB/s +INTEGER Triad: 11546.06 MB/s +--- +INTEGER AVERAGE: 11533.77 MB/s + +Benchmark #2: +INTEGER Copy: 11580.06 MB/s +INTEGER Scale: 11617.25 MB/s +INTEGER Add: 11748.95 MB/s +INTEGER Triad: 11837.43 MB/s +--- +INTEGER AVERAGE: 11695.92 MB/s + +Benchmark #3: +INTEGER Copy: 11674.45 MB/s +INTEGER Scale: 11566.59 MB/s +INTEGER Add: 11643.59 MB/s +INTEGER Triad: 11633.42 MB/s +--- +INTEGER AVERAGE: 11629.51 MB/s + +Benchmark #4: +INTEGER Copy: 11496.38 MB/s +INTEGER Scale: 11528.06 MB/s +INTEGER Add: 11641.10 MB/s +INTEGER Triad: 11742.61 MB/s +--- +INTEGER AVERAGE: 11602.04 MB/s + +Benchmark #5: +INTEGER Copy: 11568.45 MB/s +INTEGER Scale: 11579.32 MB/s +INTEGER Add: 11646.55 MB/s +INTEGER Triad: 11596.57 MB/s +--- +INTEGER AVERAGE: 11597.72 MB/s + +INTEGER BatchRun Copy: 11562.63 MB/s +INTEGER BatchRun Scale: 11563.77 MB/s +INTEGER BatchRun Add: 11649.55 MB/s +INTEGER BatchRun Triad: 11671.22 MB/s +--- +INTEGER BatchRun AVERAGE: 11611.79 MB/s
\ No newline at end of file diff --git a/tests/data/external/ssl/AES-128-CBC_dump b/tests/data/external/ssl/AES-128-CBC_dump new file mode 100644 index 00000000..32568e14 --- /dev/null +++ b/tests/data/external/ssl/AES-128-CBC_dump @@ -0,0 +1,7 @@ +OpenSSL 1.0.2f 28 Jan 2016 +built on: reproducible build, date unspecified +options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx) +compiler: gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM +The 'numbers' are in 1000s of bytes per second processed. +type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes +aes-128-cbc 533103.05k 570042.22k 580021.25k 584568.83k 599470.83k
\ No newline at end of file diff --git a/tests/data/external/ssl/RSA_dump b/tests/data/external/ssl/RSA_dump new file mode 100644 index 00000000..55e40792 --- /dev/null +++ b/tests/data/external/ssl/RSA_dump @@ -0,0 +1,9 @@ +OpenSSL 1.0.2f 28 Jan 2016 +built on: reproducible build, date unspecified +options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx) +compiler: gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM + sign verify sign/s verify/s +rsa 512 bits 0.000056s 0.000004s 17828.4 222903.5 +rsa 1024 bits 0.000169s 0.000011s 5923.9 88397.9 +rsa 2048 bits 0.000793s 0.000037s 1261.4 26951.3 +rsa 4096 bits 0.008280s 0.000131s 120.8 7633.7 diff --git a/tests/unit/api/conftest.py b/tests/unit/api/conftest.py new file mode 100644 index 00000000..23a3be82 --- /dev/null +++ b/tests/unit/api/conftest.py @@ -0,0 +1,22 @@ +############################################################################## +# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import pytest + +from qtip.api import __main__ + + +@pytest.fixture(scope="session") +def app(): + return __main__.get_app().app + + +@pytest.fixture(scope="session") +def app_client(app): + return app.test_client() diff --git a/tests/unit/api/metric_controller_test.py b/tests/unit/api/metric_controller_test.py new file mode 100644 index 00000000..caba7972 --- /dev/null +++ b/tests/unit/api/metric_controller_test.py @@ -0,0 +1,37 @@ +############################################################################## +# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import httplib +import json + +from qtip.base.constant import BaseProp + + +def test_get_list_metrics(app_client): + response_success = app_client.get("/v1.0/metrics") + assert response_success.status_code == httplib.OK + metric_list = json.loads(response_success.data)['metrics'] + assert len(metric_list) > 0 + assert metric_list[0].endswith('.yaml') + + +def test_get_metric(app_client): + response_success = app_client.get("/v1.0/metrics/dpi.yaml") + assert response_success.status_code == httplib.OK + metric_data = json.loads(response_success.data) + assert BaseProp.NAME in metric_data + assert BaseProp.WORKLOADS in metric_data + assert isinstance(metric_data[BaseProp.WORKLOADS], list) + + +def test_get_metric_not_found(app_client): + response_not_found = app_client.get("/v1.0/metrics/fake.yaml") + response_data = json.loads(response_not_found.data) + assert response_not_found.status_code == httplib.NOT_FOUND + assert response_data['title'] == "Metric not found" diff --git a/tests/unit/api/plan_controller_test.py b/tests/unit/api/plan_controller_test.py new file mode 100644 index 00000000..136bd3c6 --- /dev/null +++ b/tests/unit/api/plan_controller_test.py @@ -0,0 +1,49 @@ +############################################################################## +# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import httplib +import json + + +from qtip.loader.plan import PlanProp + + +def test_invalid_url(app_client): + response_url_not_found = app_client.get("/v1.0/fakeresource") + assert response_url_not_found.status_code == httplib.NOT_FOUND + + +def test_get_list_plans(app_client): + response_success = app_client.get("/v1.0/plans") + assert response_success.status_code == httplib.OK + plan_list = json.loads(response_success.data)['plans'] + assert len(plan_list) > 0 + assert plan_list[0].endswith('.yaml') + + +def test_get_plan(app_client): + response_success = app_client.get("/v1.0/plans/sample.yaml") + assert response_success.status_code == httplib.OK + plan_data = json.loads(response_success.data) + assert PlanProp.NAME in plan_data + assert PlanProp.DESCRIPTION in plan_data + assert PlanProp.CONFIG in plan_data + assert PlanProp.QPIS in plan_data + + +def test_get_plan_not_found(app_client): + response_not_found = app_client.get("/v1.0/plans/fake.yaml") + response_data = json.loads(response_not_found.data) + assert response_not_found.status_code == httplib.NOT_FOUND + assert response_data['title'] == "Plan not found" + + +def test_runner_not_implemented(app_client): + response_error = app_client.post("/v1.0/plans/fake.yaml?action=run", follow_redirects=False) + assert response_error.status_code == httplib.NOT_IMPLEMENTED diff --git a/tests/unit/api/qpi_controller_test.py b/tests/unit/api/qpi_controller_test.py new file mode 100644 index 00000000..6291dd9b --- /dev/null +++ b/tests/unit/api/qpi_controller_test.py @@ -0,0 +1,43 @@ +############################################################################## +# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import httplib +import json + +from qtip.base.constant import FormulaName +from qtip.base.constant import SpecProp + + +def test_get_list_qpis(app_client): + response_success = app_client.get("/v1.0/qpis") + assert response_success.status_code == httplib.OK + qpi_spec_list = json.loads(response_success.data)['qpis'] + assert len(qpi_spec_list) > 0 + assert qpi_spec_list[0].endswith('.yaml') + + +def test_get_qpi(app_client): + response_success = app_client.get("/v1.0/qpis/compute.yaml") + assert response_success.status_code == httplib.OK + qpi_data = json.loads(response_success.data) + assert SpecProp.DESCRIPTION in qpi_data + assert SpecProp.FORMULA in qpi_data + assert SpecProp.SECTIONS in qpi_data + assert qpi_data[SpecProp.FORMULA] in FormulaName.__dict__.values() + sections = qpi_data[SpecProp.SECTIONS] + assert isinstance(sections, list) + for section in sections: + assert SpecProp.NAME in section + + +def test_get_qpi_not_found(app_client): + response_not_found = app_client.get("/v1.0/qpis/fake.yaml") + response_data = json.loads(response_not_found.data) + assert response_not_found.status_code == httplib.NOT_FOUND + assert response_data['title'] == "QPI not found" diff --git a/tests/unit/cli/cmd_metric_test.py b/tests/unit/cli/cmd_metric_test.py index 30f3448a..cd496ad9 100644 --- a/tests/unit/cli/cmd_metric_test.py +++ b/tests/unit/cli/cmd_metric_test.py @@ -1,5 +1,5 @@ ############################################################### -# Copyright (c) 2016 ZTE Corp and others. +# Copyright (c) 2017 taseer94@gmail.com and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -8,8 +8,8 @@ ############################################################################## import pytest -from click.testing import CliRunner +from click.testing import CliRunner from qtip.cli.entry import cli @@ -20,7 +20,9 @@ def runner(): def test_list(runner): result = runner.invoke(cli, ['metric', 'list']) - assert result.output == '' + assert 'dhrystone' and 'whetstone' and 'dpi' and \ + 'ramspeed' and 'fake-metric' and 'ssl' \ + in result.output def test_run(runner): @@ -32,8 +34,10 @@ def test_run(runner): def test_show(runner): - result = runner.invoke(cli, ['metric', 'show', 'fake-metric']) - assert result.output == '' + result = runner.invoke(cli, ['metric', 'show', 'dhrystone']) + assert 'Name: dhrystone' in result.output + assert 'Description: A synthetic computing benchmark program intended to be representative of' \ + 'system (integer) programming.' result = runner.invoke(cli, ['metric', 'show']) assert 'Missing argument "name".' in result.output diff --git a/tests/unit/cli/cmd_plan_test.py b/tests/unit/cli/cmd_plan_test.py index 1708c340..30025ae0 100644 --- a/tests/unit/cli/cmd_plan_test.py +++ b/tests/unit/cli/cmd_plan_test.py @@ -1,5 +1,5 @@ ############################################################### -# Copyright (c) 2016 ZTE Corp and others. +# Copyright (c) 2017 taseer94@gmail.com and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -20,7 +20,7 @@ def runner(): def test_list(runner): result = runner.invoke(cli, ['plan', 'list']) - assert result.output == '' + assert 'Plan' and 'compute' and 'sample' in result.output def test_run(runner): @@ -32,8 +32,9 @@ def test_run(runner): def test_show(runner): - result = runner.invoke(cli, ['plan', 'show', 'fake-plan']) - assert result.output == '' + result = runner.invoke(cli, ['plan', 'show', 'compute']) + assert 'Name: compute QPI' in result.output + assert 'Description: compute QPI profile' result = runner.invoke(cli, ['plan', 'show']) assert 'Missing argument "name".' in result.output diff --git a/tests/unit/cli/cmd_qpi_test.py b/tests/unit/cli/cmd_qpi_test.py index 485d5462..3d2c2613 100644 --- a/tests/unit/cli/cmd_qpi_test.py +++ b/tests/unit/cli/cmd_qpi_test.py @@ -1,5 +1,5 @@ ############################################################### -# Copyright (c) 2016 ZTE Corp and others. +# Copyright (c) 2017 taseer94@gmail.com and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -8,9 +8,9 @@ ############################################################################## import pytest -from click.testing import CliRunner from qtip.cli.entry import cli +from click.testing import CliRunner @pytest.fixture(scope="module") @@ -20,7 +20,7 @@ def runner(): def test_list(runner): result = runner.invoke(cli, ['qpi', 'list']) - assert result.output == '' + assert 'QPIs' and 'compute' in result.output def test_run(runner): @@ -32,8 +32,9 @@ def test_run(runner): def test_show(runner): - result = runner.invoke(cli, ['qpi', 'show', 'fake-qpi']) - assert result.output == '' + result = runner.invoke(cli, ['qpi', 'show', 'compute']) + assert 'Name: compute' in result.output + assert 'Description: sample performance index of computing' in result.output result = runner.invoke(cli, ['qpi', 'show']) assert 'Missing argument "name".' in result.output diff --git a/tests/unit/cli/cmd_report_test.py b/tests/unit/cli/cmd_report_test.py new file mode 100644 index 00000000..963ce987 --- /dev/null +++ b/tests/unit/cli/cmd_report_test.py @@ -0,0 +1,91 @@ +############################################################### +# Copyright (c) 2017 taseer94@gmail.com and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import pytest + +from click.testing import CliRunner +from qtip.cli.entry import cli + + +@pytest.fixture(scope="module") +def runner(): + return CliRunner() + + +def test_dhrystone(runner): + """Test dhrystone report""" + + result = runner.invoke(cli, ['report', 'show', 'dhrystone']) + assert "Benchmark: dhrystone" in result.output + assert "CPU Usage: 3%" in result.output + assert "Number: 40" in result.output + assert "Score: 63529.6" in result.output + assert "Single CPU:" in result.output + assert "Total CPUs: 40" in result.output + + +def test_whetstone(runner): + """ Test whetstone output""" + + result = runner.invoke(cli, ['report', 'show', 'whetstone']) + assert "Benchmark: whetstone" in result.output + assert "CPU Usage: 3%" in result.output + assert "Results:" in result.output + assert "Multi CPU:" in result.output + assert "Number: 40" in result.output + assert "Score: 21198.3" in result.output + assert "Single CPU:" in result.output + + +def test_dpi(runner): + """ Test dpi report""" + result = runner.invoke(cli, ['report', 'show', 'dpi']) + assert "Benchmark: dpi" in result.output + assert "CPU Usage: 3%" in result.output + assert "Bits per Second: 3.638" in result.output + assert "Packets per Second: 1.45" in result.output + assert "Bits per Second: 3.69" in result.output + assert "Packets per Second: 1.458" in result.output + + +def test_ramspeed(runner): + """ Test ramspeed report """ + result = runner.invoke(cli, ['report', 'show', 'ramspeed']) + assert "Benchmark: ramspeed" in result.output + assert "CPU Usage: 3%" in result.output + assert "Float Addition: 10217.62" in result.output + assert "Float Average: 9176.88" in result.output + assert "Float Copy: 8127.13" in result.output + assert "Float Scale: 8085.40" in result.output + assert "Float Triad: 10277.38" in result.output + assert "Integer Addition: 11471.63" in result.output + assert "Integer Average: 11396.35" in result.output + + +def test_ssl(runner): + """ Test ssl report""" + + result = runner.invoke(cli, ['report', 'show', 'ssl']) + assert "Benchmark: ssl" in result.output + assert "CPU Usage: 3%" in result.output + assert "AES 128 CBC (bytes):" in result.output + assert "256: 584951.30k" in result.output + assert "RSA SIGN:" in result.output + assert "2048: 9.9" in result.output + assert "RSA VERIFY:" in result.output + assert "4096: 7688.5" in result.output + + +def test_sys(runner): + """ Test sys_info """ + + result = runner.invoke(cli, ['report', 'show', 'ssl']) + assert "System Information:" in result.output + assert "Host Name: node-38.zte.com.cn" in result.output + assert "Memory: 4403.7/128524.1MB" in result.output diff --git a/tests/unit/cli/options_test.py b/tests/unit/cli/options_test.py index f9472814..9dbbe6f3 100644 --- a/tests/unit/cli/options_test.py +++ b/tests/unit/cli/options_test.py @@ -1,5 +1,5 @@ ############################################################### -# Copyright (c) 2016 ZTE Corp and others. +# Copyright (c) 2017 taseer94@gmail.com and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -8,8 +8,9 @@ ############################################################################## import pytest -from click.testing import CliRunner +import sys +from click.testing import CliRunner from qtip.cli.entry import cli @@ -28,5 +29,5 @@ class TestClass(object): assert 'dev' in result.output def test_debug(self, runner): - result = runner.invoke(cli, ['-d']) - assert '' in result.output + runner.invoke(cli, ['-d']) + assert sys.tracebacklimit == 8 diff --git a/tests/unit/collector/base_test.py b/tests/unit/collector/collector_test.py index 17fe1af1..17fe1af1 100644 --- a/tests/unit/collector/base_test.py +++ b/tests/unit/collector/collector_test.py diff --git a/tests/unit/loader/plan_test.py b/tests/unit/loader/plan_test.py index 70ae2ad5..4c92e8d5 100644 --- a/tests/unit/loader/plan_test.py +++ b/tests/unit/loader/plan_test.py @@ -13,15 +13,18 @@ from qtip.collector.logfile import LogfileCollector from qtip.loader.plan import load_collector from qtip.loader.plan import Plan from qtip.loader.plan import PlanProp -from qtip.loader.plan import QPISpec -def test_init(plan): - assert plan.name == 'doctor performance profiling' - assert isinstance(plan.content, dict) - for qpi in plan.qpis: - assert isinstance(qpi, QPISpec) +def test_construct(benchmarks_root): + sample = Plan('sample.yaml') + assert isinstance(sample, Plan) + # fixture can not be used in pytest.mark.parametrized + sample = Plan('sample.yaml', [benchmarks_root]) + assert isinstance(sample, Plan) + + +def test_invalid_construct(): with pytest.raises(TypeError) as excinfo: Plan() assert '__init__() takes at least 2 arguments (1 given)' \ @@ -30,7 +33,7 @@ def test_init(plan): def test_list_all(benchmarks_root): plan_list = list(Plan.list_all(paths=[benchmarks_root])) - assert len(plan_list) is 2 + assert len(plan_list) is 3 for desc in plan_list: assert PlanProp.NAME in desc assert PlanProp.ABSPATH in desc diff --git a/tests/unit/reporter/console_test.py b/tests/unit/reporter/console_test.py new file mode 100644 index 00000000..aa7f848b --- /dev/null +++ b/tests/unit/reporter/console_test.py @@ -0,0 +1,89 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import pytest + +from qtip.reporter.console import ConsoleReporter + + +@pytest.fixture +def console_reporter(): + return ConsoleReporter({}) + + +def test_constructor(console_reporter): + assert isinstance(console_reporter, ConsoleReporter) + + +def test_dhrystone(console_reporter): + """ Test dhrystone report""" + + result = console_reporter.render('dhrystone') + assert "Benchmark: dhrystone" in result + assert "Number: 40" in result + assert "Score: 63529.6" in result + assert "Single CPU:" in result + assert "Total CPUs: 40" in result + + +def test_whetstone(console_reporter): + """ Test whetstone output""" + + result = console_reporter.render('whetstone') + assert "Benchmark: whetstone" in result + assert "Results:" in result + assert "Multi CPU:" in result + assert "Number: 40" in result + assert "Score: 21198.3" in result + assert "Single CPU:" in result + + +def test_dpi(console_reporter): + """ Test dpi report""" + + result = console_reporter.render('dpi') + assert "Benchmark: dpi" in result + assert "Bits per Second: 3.638" in result + assert "Packets per Second: 1.45" in result + assert "Bits per Second: 3.69" in result + assert "Packets per Second: 1.458" in result + + +def test_ramspeed(console_reporter): + """ Test ramspeed report """ + + result = console_reporter.render('ramspeed') + assert "Float Addition: 10217.62" in result + assert "Float Average: 9176.88" in result + assert "Float Copy: 8127.13" in result + assert "Float Scale: 8085.40" in result + assert "Float Triad: 10277.38" in result + assert "Integer Addition: 11471.63" in result + assert "Integer Average: 11396.35" in result + + +def test_ssl(console_reporter): + """ Test ssl report""" + + result = console_reporter.render('ssl') + assert "AES 128 CBC (bytes):" in result + assert "256: 584951.30k" in result + assert "RSA SIGN:" in result + assert "2048: 9.9" in result + assert "RSA VERIFY:" in result + assert "4096: 7688.5" in result + + +def test_sys(console_reporter): + """ Test sys_info """ + + result = console_reporter.render('ssl') + assert "System Information:" in result + assert "Host Name: node-38.zte.com.cn" in result + assert "Memory: 4403.7/128524.1MB" in result diff --git a/tests/unit/runner/runner_test.py b/tests/unit/runner/runner_test.py new file mode 100644 index 00000000..b7da1611 --- /dev/null +++ b/tests/unit/runner/runner_test.py @@ -0,0 +1,16 @@ +############################################################################## +# Copyright (c) 2016 ZTE Corp and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +from qtip.runner.base import BaseRunner + + +def test_constructor(): + runner = BaseRunner() + assert isinstance(runner, BaseRunner) diff --git a/tests/unit/util/env_test.py b/tests/unit/util/env_test.py new file mode 100644 index 00000000..793d1e4e --- /dev/null +++ b/tests/unit/util/env_test.py @@ -0,0 +1,307 @@ +############################################################### +# Copyright (c) 2017 ZTE Corporation +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import time + +import pytest +import mock +from collections import defaultdict +import socket + +from qtip.util import env +from qtip.util.env import AnsibleEnvSetup + + +@pytest.fixture(scope='session') +def ansible_envsetup(): + return AnsibleEnvSetup() + + +@pytest.fixture() +def hostfile(tmpdir): + fake_hostfile = tmpdir.join('hosts') + fake_hostfile.write("[hosts]\n") + fake_hostfile.write("10.20.0.3") + return fake_hostfile + + +@pytest.fixture() +def private_key(tmpdir): + fake_private_key = tmpdir.join('QtipKey') + fake_private_key.write("fake keypair") + return fake_private_key + + +@pytest.fixture() +def public_key(tmpdir): + fake_public_key = tmpdir.join('QtipKey.pub') + fake_public_key.write("fake public key") + return fake_public_key + + +def test_all_files_exist(tmpdir): + exist_file = tmpdir.mkdir('qtip').join('hello.txt') + exist_file.write("hello") + non_exist_file = tmpdir.strpath + '/tmp.txt' + assert env.all_files_exist() is False + assert env.all_files_exist(str(exist_file)) + assert env.all_files_exist(non_exist_file) is False + assert env.all_files_exist(str(exist_file), non_exist_file) is False + + +def test_clean_file(tmpdir): + exist_file = tmpdir.mkdir('qtip').join('hello.txt') + exist_file.write("hello") + non_exist_file = tmpdir.strpath + '/tmp.txt' + + assert env.clean_file() is False + assert env.clean_file(str(exist_file)) + assert env.clean_file(non_exist_file) + + +def test_init(ansible_envsetup): + assert 'AnsibleEnvSetup' in str(type(ansible_envsetup)) + assert ansible_envsetup.keypair == defaultdict(str) + assert ansible_envsetup.hostfile is None + assert ansible_envsetup.host_ip_list == [] + + +def test_setup_exception(mocker, ansible_envsetup, hostfile): + with mock.patch.object(AnsibleEnvSetup, 'check_hostfile', side_effect=RuntimeError()): + mock_os = mocker.patch('sys.exit') + ansible_envsetup.setup({'hostfile': str(hostfile)}) + assert mock_os.call_count == 1 + + +# TODO(zhihui_wu) Need find a smart way to write this pytest +def test_setup(mocker, ansible_envsetup): + mock_check_hostfile = \ + mocker.patch.object(AnsibleEnvSetup, 'check_hostfile') + mock_generate_default_hostfile = \ + mocker.patch.object(AnsibleEnvSetup, 'generate_default_hostfile') + mock_fetch_ip = \ + mocker.patch.object(AnsibleEnvSetup, 'fetch_host_ip_from_hostfile') + mock_check_keypair = \ + mocker.patch.object(AnsibleEnvSetup, 'check_keypair') + mock_generate_default_keypair = \ + mocker.patch.object(AnsibleEnvSetup, 'generate_default_keypair') + mock_pass_keypair = \ + mocker.patch.object(AnsibleEnvSetup, 'pass_keypair_to_remote') + mock_check_ssh = \ + mocker.patch.object(AnsibleEnvSetup, 'check_hosts_ssh_connectivity') + + ansible_envsetup.setup({'keypair': str(private_key), + 'hostfile': str(hostfile)}) + mock_check_hostfile.assert_called_with(str(hostfile)) + mock_fetch_ip.assert_called_with() + mock_check_keypair.assert_called_with(str(private_key)) + mock_pass_keypair.assert_called_with() + mock_check_ssh.assert_called_with() + + ansible_envsetup.setup({'keypair': str(private_key)}) + mock_generate_default_hostfile.assert_called_with() + mock_fetch_ip.assert_called_with() + mock_check_keypair.assert_called_with(str(private_key)) + mock_pass_keypair.assert_called_with() + mock_check_ssh.assert_called_with() + + ansible_envsetup.setup({'hostfile': str(hostfile)}) + mock_check_hostfile.assert_called_with(str(hostfile)) + mock_fetch_ip.assert_called_with() + mock_generate_default_keypair.assert_called_with() + mock_pass_keypair.assert_called_with() + mock_check_ssh.assert_called_with() + + ansible_envsetup.setup() + mock_generate_default_hostfile.assert_called_with() + mock_fetch_ip.assert_called_with() + mock_generate_default_keypair.assert_called_with() + mock_pass_keypair.assert_called_with() + mock_check_ssh.assert_called_with() + + +def test_check_keypair(mocker, ansible_envsetup, private_key, public_key): + with mocker.patch.object(env, 'all_files_exist', return_value=True): + ansible_envsetup.check_keypair(str(private_key)) + assert ansible_envsetup.keypair['private'] == str(private_key) + assert ansible_envsetup.keypair['public'] == str(public_key) + + +def test_check_keypair_failed(mocker, ansible_envsetup): + mocker.patch.object(env, 'all_files_exist', return_value=False) + with pytest.raises(RuntimeError) as excinfo: + ansible_envsetup.check_keypair(str(private_key)) + assert 'The keypairs you in the configuration file ' \ + 'is invalid or not existed.' == str(excinfo.value) + assert ansible_envsetup.keypair['private'] == '' + assert ansible_envsetup.keypair['public'] == '' + + +@pytest.mark.parametrize("file_existence, expected", [ + (True, 0), + (False, 1) +]) +def test_generate_default_keypair(mocker, ansible_envsetup, file_existence, expected): + mock_os = mocker.patch('os.system') + mocker.patch.object(env, 'all_files_exist', return_value=file_existence) + ansible_envsetup.generate_default_keypair() + assert mock_os.call_count == expected + assert ansible_envsetup.keypair['private'] == env.PRIVATE_KEY + assert ansible_envsetup.keypair['public'] == env.PUBLIC_KEY + + +@pytest.mark.parametrize("ips, expected", [ + (['10.20.0.3'], 1), + (['10.20.0.3', '10.20.0.4'], 2) +]) +def test_pass_keypair_to_remote_successful(mocker, ansible_envsetup, ips, expected): + ansible_envsetup.host_ip_list = ips + mock_pass_keypair = \ + mocker.patch.object(AnsibleEnvSetup, '_pass_keypair', return_value=True) + ansible_envsetup.pass_keypair_to_remote() + assert mock_pass_keypair.call_count == expected + + +def test_pass_keypair_to_remote_failed(mocker, ansible_envsetup): + ansible_envsetup.host_ip_list = ['10.20.0.3'] + mocker.patch.object(AnsibleEnvSetup, '_pass_keypair', return_value=False) + with pytest.raises(RuntimeError) as excinfo: + ansible_envsetup.pass_keypair_to_remote() + assert "Failed on passing keypair to remote." in str(excinfo.value) + + +def test_pass_keypair(monkeypatch, mocker, ansible_envsetup): + monkeypatch.setattr(time, 'sleep', lambda s: None) + mock_os = mocker.patch('os.system') + ansible_envsetup._pass_keypair('10.20.0.3', str(private_key)) + assert mock_os.call_count == 2 + + +def test_pass_keypair_exception(ansible_envsetup): + with mock.patch('os.system', side_effect=Exception()) as mock_os: + result = ansible_envsetup._pass_keypair('10.20.0.3', str(private_key)) + assert result is False + assert mock_os.call_count == 1 + + +def test_check_hostfile(mocker, ansible_envsetup, hostfile): + ansible_envsetup.check_hostfile(str(hostfile)) + assert ansible_envsetup.hostfile == str(hostfile) + + with pytest.raises(RuntimeError) as excinfo: + mocker.patch.object(env, 'all_files_exist', return_value=False) + ansible_envsetup.check_hostfile(str(hostfile)) + assert str(excinfo.value) == 'The hostfile {0} is invalid or not ' \ + 'existed.'.format(str(hostfile)) + + +def test_default_hostfile_non_existed(mocker, ansible_envsetup): + with mocker.patch.object(env, 'all_files_exist', return_value=False): + mock_generate_hostfile_via_installer = \ + mocker.patch.object(AnsibleEnvSetup, + '_generate_hostfile_via_installer') + ansible_envsetup.generate_default_hostfile() + mock_generate_hostfile_via_installer.assert_called_once_with() + + +def test_default_hostfile_existed(mocker, ansible_envsetup): + with mocker.patch.object(env, 'all_files_exist', return_value=True): + mock_generate_hostfile_via_installer = \ + mocker.patch.object(AnsibleEnvSetup, + '_generate_hostfile_via_installer') + ansible_envsetup.generate_default_hostfile() + mock_generate_hostfile_via_installer.assert_not_called() + + +@pytest.mark.parametrize("test_input, expected", [ + (({}, KeyError), 'INSTALLER_TYPE'), + (({'INSTALLER_TYPE': 'fuel'}, KeyError), 'INSTALLER_IP'), + (({'INSTALLER_TYPE': 'fuel_1', 'INSTALLER_IP': '10.20.0.2'}, ValueError), + 'fuel_1 is not supported'), + (({'INSTALLER_TYPE': 'fuel', 'INSTALLER_IP': ''}, ValueError), + 'The value of environment variable INSTALLER_IP is empty') +]) +def test_generate_hostfile_via_installer_exception(monkeypatch, ansible_envsetup, test_input, expected): + if test_input[0]: + for key in test_input[0]: + monkeypatch.setenv(key, test_input[0][key]) + + with pytest.raises(test_input[1]) as excinfo: + ansible_envsetup._generate_hostfile_via_installer() + assert expected in str(excinfo.value) + + +def test_generate_hostfile_via_installer(monkeypatch, mocker, ansible_envsetup): + monkeypatch.setenv('INSTALLER_TYPE', 'fuel') + monkeypatch.setenv('INSTALLER_IP', '10.20.0.2') + mock_os = mocker.patch('os.system') + ansible_envsetup._generate_hostfile_via_installer() + assert mock_os.call_count == 1 + assert ansible_envsetup.hostfile == env.HOST_FILE + + +def test_fetch_host_ip_from_hostfile(ansible_envsetup, hostfile): + ansible_envsetup.hostfile = str(hostfile) + ansible_envsetup.fetch_host_ip_from_hostfile() + assert ansible_envsetup.host_ip_list == ['10.20.0.3'] + + +def test_fetch_host_ip_from_empty_hostfile(ansible_envsetup, tmpdir): + empty_hostfile = tmpdir.join('empty_hostfile') + empty_hostfile.write("") + ansible_envsetup.hostfile = str(empty_hostfile) + with pytest.raises(ValueError) as excinfo: + ansible_envsetup.fetch_host_ip_from_hostfile() + assert str(excinfo.value) == "The hostfile doesn't include host ip addresses." + + +@pytest.mark.parametrize("ips, expected", [ + (['10.20.0.3'], 1), + (['10.20.0.3', '10.20.0.4'], 2) +]) +def test_check_hosts_ssh_connectivity(mocker, ansible_envsetup, ips, expected): + ansible_envsetup.host_ip_list = ips + mock_ssh_is_ok = \ + mocker.patch.object(AnsibleEnvSetup, '_ssh_is_ok', return_value=True) + ansible_envsetup.check_hosts_ssh_connectivity() + assert mock_ssh_is_ok.call_count == expected + + +def test_check_hosts_ssh_connectivity_failed(mocker, ansible_envsetup): + ansible_envsetup.host_ip_list = ['10.20.0.3'] + mocker.patch.object(AnsibleEnvSetup, '_ssh_is_ok', return_value=False) + with pytest.raises(RuntimeError) as excinfo: + ansible_envsetup.check_hosts_ssh_connectivity() + assert "Failed on checking hosts ssh connectivity." == str(excinfo.value) + + +@pytest.mark.parametrize("stderrinfo, expected", [ + ('', True), + ('sorry', False) +]) +def test_ssh_is_ok(mocker, ansible_envsetup, private_key, stderrinfo, expected): + stderr = mock.MagicMock() + stderr.readlines.return_value = stderrinfo + mock_sshclient = mocker.patch('paramiko.SSHClient') + test_ssh_client = mock_sshclient.return_value + test_ssh_client.exec_command.return_value = ('', '', stderr) + result = ansible_envsetup._ssh_is_ok('10.20.0.3', str(private_key)) + assert result == expected + test_ssh_client.connect.assert_called_once_with( + '10.20.0.3', key_filename=str(private_key)) + test_ssh_client.exec_command.assert_called_with('uname') + + +def test_ssh_exception(monkeypatch, mocker, ansible_envsetup): + monkeypatch.setattr(time, 'sleep', lambda s: None) + mock_sshclient = mocker.patch('paramiko.SSHClient') + test_ssh_client = mock_sshclient.return_value + test_ssh_client.exec_command.side_effect = socket.error() + result = ansible_envsetup._ssh_is_ok('10.20.0.3', str(private_key), attempts=1) + assert result is False diff --git a/tests/unit/util/logger_test.py b/tests/unit/util/logger_test.py index 339b2bf6..78c4c109 100644 --- a/tests/unit/util/logger_test.py +++ b/tests/unit/util/logger_test.py @@ -1,3 +1,12 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + import pytest from qtip.util import logger |