traceback due to truncated requires line in cpu/topology description when using remote

Bug #1870549 reported by Jeff Lane 
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Next Generation Checkbox (CLI)
Fix Released
Critical
Unassigned

Bug Description

Ran the full cert suite using checkbox-remote and found that it quickly failed

And I'm not sure exactly what job is failing here... according to the header it's a job called com.canonical.certification::cpuinfo

But as a job definition, that ID only exists in plainbox-provider-ipdt which isn't part of my test plans right now.

bladernr@galactica:~/development$ grep -r "com.canonical.certification::cpuinfo" plainbox*
plainbox/plainbox/impl/exporter/xlsx.py: * com.canonical.certification::cpuinfo
plainbox/plainbox/impl/exporter/xlsx.py: resource = 'com.canonical.certification::cpuinfo'
plainbox-provider-ipdt/units/test-plan.pxu: com.canonical.certification::cpuinfo
plainbox-provider-ipdt/units/test-plan.pxu: com.canonical.certification::cpuinfo

BUT that summary string "Collect information about the CPU"

comes from the cpuinfo resource job:
plainbox-provider-resource/jobs/resource.pxu:_summary: Collect information about the CPU

but that job description doesn't contain the constraint in the traceback:

id: cpuinfo
estimated_duration: 0.37
plugin: resource
command: cpuinfo_resource
_summary: Collect information about the CPU
_description: Gets CPU resource info from /proc/cpuinfo

and the job that does contain the constraint in the traceback does not contain that job description:
plainbox-provider-checkbox/units/cpu/jobs.pxu:requires: int(cpuinfo.count) > 1 and (cpuinfo.platform == 'i386' or cpuinfo.platform == 'x86_64' or cpuinfo.platform == 's390x')

plugin: shell
category_id: com.canonical.plainbox::cpu
id: cpu/topology
estimated_duration: 1.0
requires: int(cpuinfo.count) > 1 and (cpuinfo.platform == 'i386' or cpuinfo.platform == 'x86_64' or cpuinfo.platform == 's390x')
command: cpu_topology
_summary:
 Check CPU topology for accuracy between proc and sysfs
_description:
 Parses information about CPU topology provided by proc and sysfs and checks
 that they are consistent.

So I'm a bit confused by the console output here, is checkbox conflating jobs? Or is the output just completely inaccurate?

Either way it appears that checkbox remote is truncating that requirement line
----------------------------[ Running job 6 / 111 ]----------------------------- [22/6448]
---------------------[ Collect information about the CPU ]----------------------
ID: com.canonical.certification::cpuinfo
Category: Uncategorised
--------------------------------------------------------------------------------
(Command output hidden)
    load_entry_point('checkbox-ng==1.8.0.dev0', 'console_scripts', 'checkbox-cli')()
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/checkbox_cli.py", line 123, in main
    subcmd.invoked(ctx)
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 156, in invoked
    self.connect_and_run(ctx.args.host, port)
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 214, in connect_and_run
    }[state]()
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 243, in new_session
    self.select_jobs(self.jobs)
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 321, in select_jobs
    self.run_jobs()
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 401, in run_jobs
    self._run_jobs(jobs_repr, total_num)
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 589, in _run_jobs
    self.wait_for_job()
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 442, in wait_for_job
    self.finish_job()
  File "/usr/lib/python3/dist-packages/checkbox_ng/launcher/master.py", line 447, in finish_job
    job_result = self.sa.finish_job(result)
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/netref.py", line 253, in __call__
    return syncreq(_self, consts.HANDLE_CALL, args, kwargs)
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/netref.py", line 76, in syncreq
    return conn.sync_request(handler, proxy, *args)
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/protocol.py", line 469, in sync_request
    return self.async_request(handler, *args, timeout=timeout).value
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/async_.py", line 102, in value
    raise self._obj
plainbox.vendor.rpyc.core.vinegar/plainbox.impl.resource.ResourceSyntaxError:

========= Remote Traceback (1) =========
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 700, in _analyze
    node = ast.parse(text)
  File "/usr/lib/python3.6/ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    int(cpuinfo.count) > 1 and (cpuinfo.platform == 'i386' or cpuinfo.platform == 'x86_64'
                                                                                         ^
SyntaxError: unexpected EOF while parsing

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/protocol.py", line 320, in _dispatch_request
    res = self._HANDLERS[handler](self, *args)
  File "/usr/lib/python3/dist-packages/plainbox/vendor/rpyc/core/protocol.py", line 593, in _handle_call
    return obj(*args, **dict(kwargs))
  File "/usr/lib/python3/dist-packages/plainbox/impl/session/remote_assistant.py", line 520, in finish_job
    self._sa.use_job_result(self._currently_running_job, result)
  File "/usr/lib/python3/dist-packages/plainbox/impl/decorators.py", line 142, in wrapper
    raise exc
  File "/usr/lib/python3/dist-packages/plainbox/impl/decorators.py", line 136, in wrapper
    return func(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/plainbox/impl/session/assistant.py", line 1495, in use_job_result
    self._context.state.update_job_result(job, result)
  File "/usr/lib/python3/dist-packages/plainbox/impl/session/state.py", line 939, in update_job_result
    self, job, result, fake_resources=self._fake_resources)
  File "/usr/lib/python3/dist-packages/plainbox/impl/ctrl.py", line 266, in observe_result
    session_state, job, result, fake_resources)
  File "/usr/lib/python3/dist-packages/plainbox/impl/ctrl.py", line 277, in _process_resource_result
    session_state, job, result, fake_resources)
  File "/usr/lib/python3/dist-packages/plainbox/impl/ctrl.py", line 332, in _instantiate_templates
    session_state._recompute_job_readiness()
  File "/usr/lib/python3/dist-packages/plainbox/impl/session/state.py", line 1444, in _recompute_job_readiness
    for inhibitor in job.controller.get_inhibitor_list(self, job):
  File "/usr/lib/python3/dist-packages/plainbox/impl/ctrl.py", line 153, in get_inhibitor_list
    prog.evaluate_or_raise(session_state.resource_map)
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 259, in evaluate_or_raise
    ], resource_map = resource_map)
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 637, in evaluate
    lhs, rhs = self._split_and_evaluate(' or ', resource_map)
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 676, in _split_and_evaluate
    head, self._implicit_namespace, self._imports)
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 541, in __init__
    self._resource_alias_list = self._analyze(text)
  File "/usr/lib/python3/dist-packages/plainbox/impl/resource.py", line 702, in _analyze
    raise ResourceSyntaxError
plainbox.impl.resource.ResourceSyntaxError: syntax error in resource expression

Related branches

affects: plainbox-provider-checkbox → checkbox-ng
Changed in checkbox-ng:
milestone: none → 1.8.0
status: New → Fix Committed
importance: Undecided → Critical
Changed in checkbox-ng:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.