Jean-Paul Calderone
30d07d3fb5
explicitly publish these classes
2019-03-08 12:17:16 -05:00
Jean-Paul Calderone
9ad76688cc
Clean up a couple logged errors.
...
I don't really understand them but I can flush them. :/
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
62531f020b
Fix Eliot logging for tearDown
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
f0f478195d
Fix Eliot logging for setUp
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
9abec67e43
Add Eliot logging for a couple setup helpers
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
a8d67a09a5
Add Eliot logging for cleanup action
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
eba642a9a1
Get rid of the duplicate base TestCase
2019-03-08 11:54:42 -05:00
Jean-Paul Calderone
64c5796a21
Merge pull request #565 from tahoe-lafs/2989.tempdir-cleanup
...
Add some tempfile cleanup to the test suite
Fixes: ticket:2989
2019-03-08 11:48:53 -05:00
Jean-Paul Calderone
859efdc589
there's another feature
2019-03-08 08:23:44 -05:00
Jean-Paul Calderone
c45b91e63c
Merge pull request #564 from tahoe-lafs/2988.mixin-supercalls
...
Fix some mixin supercalls
Fixes: ticket:2988
2019-03-08 07:47:36 -05:00
Jean-Paul Calderone
e4242704b1
Merge pull request #563 from tahoe-lafs/2987.log_call_deferred
...
Add Eliot logging helper
Fixes: ticket:2987
2019-03-08 07:46:36 -05:00
Jean-Paul Calderone
77b63e2855
This is unused!
2019-03-07 18:56:44 -05:00
Jean-Paul Calderone
1fdb13579a
Oops. Testtools doesn't have these.
2019-03-07 18:56:37 -05:00
Jean-Paul Calderone
b2afe86b84
These tests leak resources. Clean them up.
2019-03-07 18:56:25 -05:00
Jean-Paul Calderone
925a3aed7b
Add support for "broken" Twisted-style tests.
...
Some tests leak resources. Clean up after them.
2019-03-07 18:55:52 -05:00
Jean-Paul Calderone
4de7077689
minimal docs
2019-03-07 18:54:15 -05:00
Jean-Paul Calderone
a1c8641359
these are always nice
2019-03-07 18:54:11 -05:00
Jean-Paul Calderone
19666c4c91
This class doesn't use poll.
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
1b6a5b60bf
Switch from the decorator to EliotLoggedRunTest
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
51bee19b23
Add a testtools RunTest for Eliot integration
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
bbd3b200cb
Use our base TestCase classes for these introducer tests
...
They gain free tempfile cleanup as a result.
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
565616dc75
Expand functionality of our base TestCase classes
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
8593bf1b1c
Make helper method compatible with other unittests
...
The msg keyword argument is overly precise. testtools reasonably calls it
`message` instead.
2019-03-07 18:38:52 -05:00
Jean-Paul Calderone
cb9ad3faa5
supercall tearDown *synchronously*
...
It doesn't like it if it only happens later, I guess.
2019-03-07 18:34:59 -05:00
Jean-Paul Calderone
afe97fdd8c
Fix TestMixin
2019-03-07 18:25:31 -05:00
Jean-Paul Calderone
e26895b149
Fix SignalMixin
2019-03-07 18:25:16 -05:00
Jean-Paul Calderone
3814ccb947
Fix some setUp and tearDown
2019-03-07 14:04:17 -05:00
Jean-Paul Calderone
39694fcfde
this include_args is basically useless
2019-03-07 13:30:54 -05:00
Jean-Paul Calderone
5de4f4094e
let it not return a Deferred
2019-03-07 13:30:47 -05:00
Jean-Paul Calderone
9802ee4e19
Some basic tests
2019-03-07 13:30:29 -05:00
Jean-Paul Calderone
f4950cff46
Convert some code to show it off
2019-03-07 13:14:52 -05:00
Jean-Paul Calderone
7d6e36d9c7
A basic implementation of the idea.
2019-03-07 13:07:02 -05:00
Jean-Paul Calderone
bcfd2e8ea0
ADD_FILE Eliot action
2019-03-07 12:55:24 -05:00
Jean-Paul Calderone
2931721dfa
Merge pull request #560 from tahoe-lafs/2982.process-queue-logging-fix
...
Fix serialization errors in the Eliot logging for the queue state.
Fixes: ticket:2982
2019-03-04 12:37:24 -05:00
Jean-Paul Calderone
0be2cbccc9
We don't need quoting in Eliot structured logs.
...
Also quote_filepath seems to be doing the wrong thing but it's not entirely
clear how.
2019-03-04 11:00:08 -05:00
Jean-Paul Calderone
fa3429f1cc
Serialize queue items using their path and type
2019-03-04 10:47:05 -05:00
Jean-Paul Calderone
26a7cc4f21
The log directory may not yet exist.
2019-03-04 10:08:53 -05:00
Jean-Paul Calderone
c6a2aa9fc7
There may not be any destinations.
2019-03-04 10:08:46 -05:00
Jean-Paul Calderone
7885ba6d72
write the logs
2019-03-04 09:44:00 -05:00
Jean-Paul Calderone
64ef320592
Merge pull request #557 from tahoe-lafs/2980.eliot-destination-escaping
...
Fix escaping in Eliot destinations
Fixes: ticket:2980
2019-02-27 10:16:46 -05:00
Jean-Paul Calderone
3b804d84bf
Restore the log event that the integration tests depend on
2019-02-27 09:12:09 -05:00
Jean-Paul Calderone
fe60980ccc
and switch away from Windows drive separator...
2019-02-27 06:42:57 -05:00
Jean-Paul Calderone
d203fde9f6
Change away from the Windows directory separator for the escape char
2019-02-26 19:06:35 -05:00
Jean-Paul Calderone
25a62001dd
Improve the failure case user experience
...
And test it
2019-02-26 19:05:39 -05:00
Jean-Paul Calderone
46692b5835
remove the duplicate reporting of this failure
...
it bubbles out of _process and the caller logs it
2019-02-26 15:10:33 -05:00
Jean-Paul Calderone
f89fe3a5ad
get this item status in the right action context
2019-02-26 15:10:24 -05:00
Jean-Paul Calderone
42d8e8dba4
overcome finger muscle memory
2019-02-26 15:09:55 -05:00
Jean-Paul Calderone
9351e47ae6
improve events reporting
2019-02-26 15:09:48 -05:00
Jean-Paul Calderone
ebeeba456f
fix conflict logging
2019-02-26 14:38:24 -05:00
Jean-Paul Calderone
3fca501d45
unused
2019-02-26 14:38:00 -05:00
Jean-Paul Calderone
92449563d4
no callers remain
2019-02-26 14:26:45 -05:00
Jean-Paul Calderone
7d8d74425c
Convert Downloader._process
2019-02-26 14:26:37 -05:00
Jean-Paul Calderone
248449fefa
convert _filter_batch_to_deque
2019-02-26 14:26:00 -05:00
Jean-Paul Calderone
51e8edbad7
Don't just leave this Deferred dangling
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
354dceda79
Get rid of last returnValue use
...
Supporting it with Eliot is challenging and we don't actually need it.
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
1d97486c29
Flush the UnrecoverableFileError from perform-scan
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
79bfb8acb6
can't log self! bluh
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
437084c300
pull this up and use it more
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
15601a37e9
it's a set apparently
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
436b91b463
oops @log_call is not Deferred friendly
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
92cf9b8232
done with those!
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
9efed05571
partial conversion of complex _process
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
e820698194
Simplified _perform_scan conversion
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
ef69bb83f4
another improvement to scan_listing
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
17597e53c9
improvement to scan_listing
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
7790820efd
convert start_downloading
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
3b38a228b0
Relax restriction on mtime
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
91d86363ec
Convert the rest of _write_downloaded_file
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
529389a48c
Convert _write_downloaded_file
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
ad5cfd0e45
convert a couple rename helpers
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
03f480e5be
convert _real_notify
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
c3e50a4536
convert _notify
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
bfb039c6c6
convert _scan
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
5410acd745
use this helper
...
it might even let us refactor someday
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
999b8bdbd7
convert _full_scan
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
d7bb97ae05
Factor out repeated queue processor identification
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
f553469944
convert add_pending
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
2761d38ce2
convert start_uploading
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
28a4a61dab
convert stop(_monitoring)
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
44a8ac8161
convert start_monitoring
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
c88b66fb05
remove unused helper
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
5dd225de07
Add the necessary Eliot logging flush/assertion
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
491e0ecde3
Convert another _process and some helpers
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
83c4056a5d
Convert _process_deque
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
2b9e6784ab
news fragment
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
d52e9ccc6f
unused attribute
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
587f50882e
Convert _begin_processing
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
9207e07407
There need be no "debug log".
2019-02-26 13:45:39 -05:00
Jean-Paul Calderone
ca82d4f83d
Merge remote-tracking branch 'origin/master' into 2972.magic-folder-eliot-logs
2019-02-26 13:33:39 -05:00
Jean-Paul Calderone
7fb695f956
Add user-facing help about destinations
2019-02-25 13:34:02 -05:00
Jean-Paul Calderone
1cf4fd46ed
class docstring
2019-02-25 13:15:09 -05:00
Jean-Paul Calderone
67ca5c4b4c
Give the top-level command --eliot-destination
2019-02-25 13:12:03 -05:00
Jean-Paul Calderone
4f238d0f64
Clarify possible usage here
2019-02-25 13:11:52 -05:00
Jean-Paul Calderone
f20184ce95
Declare our new dependencies
2019-02-25 11:55:47 -05:00
Jean-Paul Calderone
abae1be9c6
Add helpers for configuring and using Eliot logging
2019-02-25 11:52:50 -05:00
Jean-Paul Calderone
f90a137552
Basic housekeeping previously missed
2019-02-25 08:57:38 -05:00
Jean-Paul Calderone
89e59dde05
Revert _perform_scan to inlineCallbacks style
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
0a9a962614
inline_callbacks moved
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
121fdc141b
Slightly improved API documentation
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
7ed9b0a02e
document this TestCase thing
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
4f796312a5
Switch tests over to Eliot-friendly version of inlineCallbacks
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
42c1d3939f
_begin_processing cleanups
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
7d2827b93d
Better docs for QueueMixin.stop
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
049a535048
reduce repetition
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
a2b4455229
try to reduce the size of the diff relative to master
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
7a9f52d2e5
make sure shutdown failures go somewhere good
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
ebd017cf2b
Clean up action relationship where it's easy to do so
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
88eb368db1
Further Eliotification
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
f1a7dcf309
A fair bit more Eliot conversion
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
9966cb26d2
Basic _process logging
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
7e89776349
Convert various logging to use Eliot
...
This unfortunately also involves refactoring some inlineCallbacks-using code
to not use inlineCallbacks.
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
e226956d14
Some testing for Eliot message validity
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
3020fb979d
Hoist some of this to a shared module
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
dd02a23cad
A few more debug prints - for now
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
6ca328ba94
Fix comparison of NummedObj against non-NummedObj
...
Previously this would explode with AttributeError.
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
714a7de84a
Associate an Eliot action with magicfolder database updates
2019-02-25 08:35:57 -05:00
Jean-Paul Calderone
19f06809e2
That was all nonsense. Throw it out.
2019-02-22 09:11:44 -05:00
Jean-Paul Calderone
e55ee7d044
Move generator context state to a generator context manager
2019-02-22 08:40:16 -05:00
Jean-Paul Calderone
d902f7567f
Add a test for nested decorated generators
2019-02-22 08:39:38 -05:00
Jean-Paul Calderone
66d4a9b4a1
Depend on Eliot
2019-02-21 13:19:57 -05:00
Jean-Paul Calderone
cd3207e543
test that close works. it does.
2019-02-21 13:11:44 -05:00
Jean-Paul Calderone
05807ace40
Split the implementation helpers out of the test suite
2019-02-21 12:54:10 -05:00
Jean-Paul Calderone
609af9ce18
unused import
2019-02-21 12:42:57 -05:00
Jean-Paul Calderone
15ae31bf23
A stab at Eliot support for inlineCallbacks
2019-02-21 12:42:52 -05:00
Jean-Paul Calderone
9ad8e21530
An Eliot-adjacent testing helper
2019-02-21 12:42:46 -05:00
Jean-Paul Calderone
c764214d0e
A note about this queue flushing.
2019-01-31 09:07:31 -05:00
Jean-Paul Calderone
f61b51619d
Improve the failure mode for this test.
...
Make it show stderr if there is any and stdout if the expected content is missing.
2019-01-31 08:16:57 -05:00
Jean-Paul Calderone
89bb68254b
Speed up MagicFolder service shutdown
...
Also work-around a tricky, mysterious failure in the test suite by explicitly
flushing the eventual call queue. I don't understand where the call that is
landing there comes from or why some other part of the code isn't properly
waiting on it.
2019-01-31 08:16:57 -05:00
Jean-Paul Calderone
2b475777d9
Return the result of the base stopService
...
It is a Deferred that indicates when things have actually stopped. Failing to
return it means callers will think everything stopped synchronously. This is
certainly not the case.
2019-01-31 08:16:57 -05:00
Jean-Paul Calderone
0f6009b97e
Fix the option setup for the webopen command.
2019-01-30 19:32:56 -05:00
Jean-Paul Calderone
b54a6e811b
Return the Deferred to make the test valid
2019-01-30 19:24:28 -05:00
Jean-Paul Calderone
f0734284e0
whitespace
2019-01-30 19:24:20 -05:00
Jean-Paul Calderone
2531c19efd
Merge pull request #537 from tahoe-lafs/2959.travis-trusty-tor
...
Move integration tests from TravisCI to CircleCI
Fixes: ticket:2959
2019-01-24 20:47:24 -05:00
Jean-Paul Calderone
7e9e447d5b
Disable Twisted's Docker check wrt inotify support
...
It breaks our container-based CI, which is perfectly happy to give us inotify
functionality, as is Docker in general as long as you don't use overlayfs.
2019-01-24 14:00:50 -05:00
Jean-Paul Calderone
dcb4a218b1
This nearby code is also dead.
2019-01-24 09:55:40 -05:00
Jean-Paul Calderone
252f9eb23a
This code has pyflakes warnings *and* is dead.
2019-01-24 09:53:49 -05:00
Jean-Paul Calderone
e36c850da4
== instead of is for string comparison
2019-01-24 09:53:02 -05:00
Jean-Paul Calderone
5ed375b145
Add more complexity to the package sanity checking
...
Support comma-separated lists of extras
2019-01-23 14:58:44 -05:00
Jean-Paul Calderone
4166551afd
Bump dependency to Twisted 16.6 and add conch extra
...
This automatically brings in the bcrypt dependency coming along with a
forthcoming Twisted release.
2019-01-23 14:02:15 -05:00
meejah
768eceacf2
unused var
2018-09-11 11:38:56 -06:00
meejah
1ad2174df9
windows yaml.safe_load returns None on unreadable files..
2018-09-11 11:14:41 -06:00
meejah
7d34f8f1a1
test case when safe_load fails
2018-09-10 21:58:28 -06:00
meejah
419dea7b3a
different import style for multi-imports from allmydata.node
2018-09-10 21:58:28 -06:00
meejah
3d35723a59
windows yamlutil.safe_load returns None when files are unreadable
2018-09-10 21:58:28 -06:00
meejah
72f17a3834
better cleanup
2018-09-10 21:58:28 -06:00
meejah
8a6a477ef7
don't depend on .called and .result (use Deferred callbacks properly)
2018-09-10 21:58:28 -06:00
meejah
054ed30757
better docstrings
2018-09-10 21:58:28 -06:00
meejah
87e0ce801a
proper assert
2018-09-10 21:58:28 -06:00
meejah
3cc64649c0
add a pointer to relevant ticket
2018-09-10 21:58:28 -06:00
meejah
d0141b2f95
better docstring from exarkun
2018-09-10 21:58:28 -06:00
meejah
edb581b434
better docstring from exarkun
2018-09-10 21:58:28 -06:00
meejah
507c2db649
better utest docstring, cleanup
2018-09-10 21:58:28 -06:00
meejah
376a1dcbd5
turn XXX into a ticket
2018-09-10 21:58:28 -06:00
meejah
8b5e988755
use docstring to mark method as async
2018-09-10 21:58:28 -06:00
meejah
2b5d3be3c8
convert XXX comment to ticket
2018-09-10 21:58:28 -06:00
meejah
7de94f623c
clarify Introducer imports
2018-09-10 21:58:28 -06:00
meejah
9a8ef9512e
clarify comments
2018-09-10 21:58:28 -06:00
meejah
f488b79c71
self._portnumfile -> config.portnum_fname
2018-09-10 21:58:28 -06:00
meejah
692128ad1d
better defaults handling
2018-09-10 21:58:28 -06:00
meejah
2e2bdf1ea1
test for EnvironmentError that's not ENOENT
2018-09-10 21:58:28 -06:00
meejah
ab812ca75f
fix utests for Deferred/Failure-returning methods
2018-09-10 21:58:28 -06:00
meejah
f6b62ca192
import
2018-09-10 21:58:28 -06:00
meejah
a344bb24dc
immutable default
2018-09-10 21:58:27 -06:00
meejah
dee8b72206
dead code
2018-09-10 21:58:27 -06:00
meejah
9aae4bd459
only handle ENOENT
2018-09-10 21:58:27 -06:00
meejah
a5287add80
clarify comments
2018-09-10 21:58:27 -06:00
meejah
efce7b1f6a
use Failure for all errors from async methods
2018-09-10 21:58:27 -06:00
meejah
676a9efc23
docstring
2018-09-10 21:58:27 -06:00
meejah
714b0887dc
more docstrings
2018-09-10 21:58:27 -06:00
meejah
2d55b61dd2
fixups after rebase
2018-09-10 21:58:27 -06:00
meejah
c22d7c632e
docstring improvements
2018-09-10 21:58:27 -06:00
meejah
3974af6660
redundant imports
2018-09-10 21:58:27 -06:00
meejah
7632504373
create_client is async
2018-09-10 21:58:27 -06:00
meejah
14a66a54f0
flake8
2018-09-10 21:58:27 -06:00
meejah
0cfbdeb634
dead code
2018-09-10 21:58:27 -06:00
meejah
767f4ddd5d
reorder args to match other method
2018-09-10 21:58:27 -06:00
meejah
045af64c2b
dead code
2018-09-10 21:58:27 -06:00
meejah
06de4c88c4
codecleanup (incorrect merge?)
2018-09-10 21:58:27 -06:00
meejah
edc50f655b
get rid of is_tub_listening
2018-09-10 21:58:27 -06:00
meejah
a82aa4ba2c
code cleanup, docs
2018-09-10 21:58:27 -06:00
meejah
955d7abfa3
move validation code to parser-helper
2018-09-10 21:58:27 -06:00
meejah
2517535d2b
test for 'listen on port 0'
2018-09-10 21:58:27 -06:00
meejah
9e34d15b90
simplify _tub_portlocation helper
2018-09-10 21:58:27 -06:00
meejah
053b494054
comment
2018-09-10 21:58:27 -06:00
meejah
e74d2a7d01
get rid of redundant 'introducer_clients' var
2018-09-10 21:58:27 -06:00
meejah
c84e50baf0
post-rebase fixup: _client_factory and docs
2018-09-10 21:58:27 -06:00
meejah
c7b47f44d2
flake8
2018-09-10 21:58:27 -06:00
meejah
17fa32633c
post-rebase fixups; needs review
2018-09-10 21:58:27 -06:00
meejah
23d304814f
not required for tests
2018-09-10 21:58:27 -06:00
meejah
283be23e3a
basedir fixup, more tests
2018-09-10 21:58:27 -06:00
meejah
a628411988
basedir fixup
2018-09-10 21:58:27 -06:00
meejah
c2d1cf4400
correct service-parent in tests
2018-09-10 21:58:27 -06:00
meejah
136495e405
basedir fixup
2018-09-10 21:58:27 -06:00
meejah
2d044e1324
remove unused method
2018-09-10 21:58:27 -06:00
meejah
bb332fecf7
basedir fixup
2018-09-10 21:58:27 -06:00
meejah
548d9cbbcc
basedir fixup
2018-09-10 21:58:27 -06:00
meejah
5d6a76ffee
proper daemonize error-handling
2018-09-10 21:58:27 -06:00
meejah
08e0c3b7e2
get rid of 'add_service' (just an alias to setServiceParent anyway)
2018-09-10 21:58:27 -06:00
meejah
ea99915af6
basedir/config fixup
2018-09-10 21:58:27 -06:00
meejah
7685fb34cd
pull 'basedir' entirely into _Config
...
Put all config-related methods into _Config; change
code to ask config for paths instead of using basedir;
add some better docstrings
2018-09-10 21:58:27 -06:00