Conversation
|
(noting here for ease of release, not because it's related) clicking through to File ".../starlette/routing.py", line 72, in app
response = await func(request)
File ".../hypofuzz/dashboard.py", line 160, in api_patches
patches = make_and_save_patches(PYTEST_ARGS, REPORTS, METADATA)
File ".../hypofuzz/patching.py", line 30, in make_and_save_patches
report = reports[nodeid][-1]
IndexError: list index out of range |
| # TODO we should really add the node id to hypofuzz-test-keys entries | ||
| node_id = reports[0]["nodeid"] | ||
| REPORTS[node_id] = SortedList(reports, key=lambda r: r["elapsed_time"]) |
There was a problem hiding this comment.
I can pretty easily construct cases where there are multiple nodeids for a single DB key, or vice-versa. They're not tests that I'd expect anyone to write naturally and so I'm not proposing to try 'fixing' that, but I do want to treat database keys as the underlying source of truth and nodeids (which are also less stable!) as only a presentation-layer thing.
|
|
I'd advocate for merging now and following up in future pulls, thoughts? |
|
I think this is actually a bug in Hypothesis (!!), but if I move the File ".../hypofuzz/dashboard.py", line 291, in run_dashboard
db._db.add_listener(send_nowait_from_anywhere)
File ".../hypothesis/database.py", line 187, in add_listener
self._start_listening()
File ".../hypothesis/database.py", line 998, in _start_listening
self._db.add_listener(self._broadcast_change)
File ".../hypothesis/database.py", line 187, in add_listener
self._start_listening()
File ".../hypothesis/database.py", line 513, in _start_listening
self._observer.start()
File ".../watchdog/observers/api.py", line 280, in start
emitter.start()
File ".../watchdog/utils/__init__.py", line 92, in start
self.on_thread_start()
File ".../watchdog/observers/inotify.py", line 125, in on_thread_start
self._inotify = InotifyBuffer(path, self.watch.is_recursive, event_mask)
File ".../watchdog/observers/inotify_buffer.py", line 37, in __init__
self._inotify = Inotify(path, recursive, event_mask)
File ".../watchdog/observers/inotify_c.py", line 176, in __init__
self._add_watch(path, event_mask)
File ".../watchdog/observers/inotify_c.py", line 401, in _add_watch
Inotify._raise_error()
File ".../watchdog/observers/inotify_c.py", line 417, in _raise_error
raise OSError(err, os.strerror(err))
FileNotFoundError: [Errno 2] No such file or directoryIn context that only takes out the dashboard, with the workers happily fuzzing away in other processes, and re-running the command brings the dashboard up just fine (because the database now exists) (obviously this is yet another thing to split out, sorry) |
|
I think I've worked out (one reason) why my dashboard has intermittent chaos on the line charts: my habitual test set has fewer tests than my laptop has cores, so I've been accidentally stress-testing the presentation of data written by concurrent workers. Bumps up priority of the reconciliation logic mentioned in #3 and #45 I suppose. |
Zac-HD
left a comment
There was a problem hiding this comment.
More generally, I've had a tough time testing this locally, with what seems to be a persistent stale build (no sorting, no box-select, etc). I'll hold other comments on the basis that they're probably stale.
I'm OK with merging this on trust that you've checked it out on your end, since I do think it improves on the status quo.
|
oh, sorry, one thing I definitely should have mentioned earlier: I don't have autobuilding set up yet, so for now whenever there's a source code change you have to run re box select: this isn't surprising, I've commented out the icon for now until I fix the issues with it. |
|
Yep, specifically Having also done
approval stands for the reasons above 🙂 |


Current UX is to allow arbitrary zoom with scroll, as opposed click + dragging to define the new viewport. I'm not entirely sold that scroll is always better yet (though I think it usually is). I think will depend on what zooming realistically gets used for.