fix octphy, fix conf, improve logging

Clearly separate the kinds of BTS hardware the GSM tester knows ('type') from
the NITB's bts/type config item ('osmobsc_bts_type' -- not 'osmonitb_...' to
stay in tune with future developments: it is the libbsc that needs this).

For BTS hardware kinds, use the full name of the binary for osmo driven models:
osmo-bts-sysmo, osmo-bts-trx, osmo-bts-octphy.

Change-Id: I1aa9b48e74013a93f9db1a34730f17717fb3b36c
diff --git a/src/osmo-gsm-tester.py b/src/osmo-gsm-tester.py
index 0137f25..17b16b7 100755
--- a/src/osmo-gsm-tester.py
+++ b/src/osmo-gsm-tester.py
@@ -143,38 +143,50 @@
     trials = []
     for trial_package in args.trial_package:
         t = trial.Trial(trial_package)
-        t.verify()
-        trials.append(t)
+        try:
+            t.verify()
+            trials.append(t)
+        except:
+            t.log_exn()
 
     trials_passed = []
     trials_failed = []
 
     for current_trial in trials:
-        with current_trial:
-            suites_passed = 0
-            suites_failed = 0
-            for suite_def, scenarios in suite_scenarios:
-                suite_run = suite.SuiteRun(current_trial, suite_def, scenarios)
-                result = suite_run.run_tests(test_names)
-                if result.all_passed:
-                    suites_passed += 1
-                    suite_run.log('PASS')
+        try:
+            with current_trial:
+                suites_passed = []
+                suites_failed = []
+                for suite_scenario_str, suite_def, scenarios in suite_scenarios:
+                    log.large_separator(current_trial.name(), suite_scenario_str)
+                    suite_run = suite.SuiteRun(current_trial, suite_scenario_str, suite_def, scenarios)
+                    result = suite_run.run_tests(test_names)
+                    if result.all_passed:
+                        suites_passed.append(suite_scenario_str)
+                        suite_run.log('PASS')
+                    else:
+                        suites_failed.append(suite_scenario_str)
+                        suite_run.err('FAIL')
+                if not suites_failed:
+                    current_trial.log('PASS')
+                    trials_passed.append(current_trial.name())
                 else:
-                    suites_failed += 1
-                    suite_run.err('FAIL')
-            if not suites_failed:
-                current_trial.log('PASS')
-                trials_passed.append(current_trial.name())
-            else:
-                current_trial.err('FAIL')
-                trials_failed.append(current_trial.name())
+                    current_trial.err('FAIL')
+                    trials_failed.append((current_trial.name(), suites_passed, suites_failed))
+        except:
+            current_trial.log_exn()
 
     sys.stderr.flush()
     sys.stdout.flush()
+    log.large_separator()
     if trials_passed:
         print('Trials passed:\n  ' + ('\n  '.join(trials_passed)))
     if trials_failed:
-        print('Trials failed:\n  ' + ('\n  '.join(trials_failed)))
+        print('Trials failed:')
+        for trial_name, suites_passed, suites_failed in trials_failed:
+            print('  %s (%d of %d suite runs failed)' % (trial_name, len(suites_failed), len(suites_failed) + len(suites_passed)))
+            for suite in suites_failed:
+                print('    FAIL:', suite)
         exit(1)
 
 # vim: expandtab tabstop=4 shiftwidth=4