This prepares to start the next test
when the DocBroker of the current one
is destroyed.
Change-Id: I3a9672d8d03ad497f15a9bca262dfe1d4f197e41
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
The default would be std:🧵:hardware_concurrency() which can be
ridiculously high for the WASM case.
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I77902a58b96248d7afe638a039886712516fe905
We now upload 3 times to succeed.
This simulates a user modifying and saving
twice before giving up and closing the
document, which succeeds in uploading.
Change-Id: Ida40f79a76fc94436c0d4b4fc1ad3e7b7acc997b
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
The BaseUnit test didn't belong to UnitTimeout
and, more important, it needed access to
private members to both validate their state
and to reset them (since the test is artificially
initializing both WSD and Kit tests and cannot
uninitialize them, lest we unload ourselves).
As such, the self-test is now internal to
BaseUnit, with the added bonus that it
is called on all tests and not just UnitTimeout.
Also, more assertions have been added.
Change-Id: Ieaf60594f39e978a7250407262bd8bbc9b642c43
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Emscripten is very opinionated about sys/poll.h so use poll.h instead.
Signed-off-by: Michael Stahl <michael.stahl@allotropia.de>
Change-Id: I9691519e27a080f03a19f0cc0dd8f796fe323062
it will be used to store user data which shouldn't
be shared between views
Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I58b7f22e4364ce9e07bb6cc74e8431363912a872
We no longer emit a fatal (FTL) log when
forced-exiting successfully.
Also, improved are some other logs to
better reflect the severity of the issue.
Change-Id: I22e79f685825f7ecd47cec76c9be9683deff2d55
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
We need to differentiate between a document
that cannot be edited (due to permissions)
and Storage being read-only.
The distinction isn't always important,
except when readonly is set either by
the client side permissions, or is due
to opening a view-only document (such as
a PDF). Since for a view-only document,
adding and editing comments might be
allowed, while the document is read-only
and cannot be otherwise edited, we
still need to upload it to storage.
This is to preserve the changes done
to comments.
Since we need to differentiate between
read-only Storage vs the above cases,
we use a new flag in Session: isWritable.
Change-Id: I028e7908db7f0f10e5407a45c71d89aaab858390
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
This helper is only true if editing of the document
is enabled and not whether or not the document is
writable in storage. Since it unifies isReadOnly
and isAllowChangeComments, which are in Session,
there is no advantage in having it in ClientSession.
It is now renamed to isEditable in Session.
Change-Id: Ib923b6162a8075be145049bc1442c42479c8ce4b
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
In some cases we don't really need the full
name of an enum, with the enum as namespace.
For those cases, we now support nameShort
and toStringShort.
Change-Id: Iddd383e15d900bb2d2f3d77e3de6a09470d51b62
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
There is no reason to print the test name
explicitly when each log entry is already
prefixed by the test name.
Change-Id: I72c0a0f2989a65f477902b97e6be816446fba5c3
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Now that we may have multiple tests in a
given Test Suite (i.e. a since unit-test
.so module), it is important to calculate
the timeout not from the total elapsed
time, but form the start of the *current*
test.
To that end, we capture the start time
on the first checkTimeout call, which
gives us the elapsed time from the very
start of the Test Suite. Using this, we
offset the elapsed time to arrive at
the time the current test consumed.
Change-Id: I01ebc3572bc147a3dabac7e1fb3237ea6d479116
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
This decodes strings encoded using
encodeURIComponent.
For now, it wraps Poco::URI::decode,
which should be replaced in the future.
Change-Id: I608b327be81aeda37d2afc4dfd29828658e92dc8
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
In some cases mounting fails on /tmp, which
should be writable. This results in Poco
exception when trying to write to it during
mounting.
This catches exceptions and fails gracefully
to enable falling back to copying.
Change-Id: I38c8db4f452767ee43bb20a98d13bd5cc36fdba2
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
add zotero UI only if user is logged in
when zotero citation edit button is clicked,
fetch the library with zotero API.
Let user select what to insert
at this stage its not a complete solution but just first stage
Signed-off-by: Pranam Lashkari <lpranam@collabora.com>
Change-Id: Id67d8409bcd6416994713acd9ace495b24823fb0
Since UnitBase (and children) are invoked from
different threads, UnitBase::exitTest could
have a race. This ultimately results in
invoking std:🧵:join() concurrently,
which is unsafe. This can result in the
following deadlock.
In this case websrv_poll had invoked
UnitBase::exitTest concurrently and
evidently finished, leaving the main
coolwsd thread deadlocked.
(gdb) info thread
Id Target Id Frame
* 1 Thread 0x7f67528f0840 (LWP 4058508) "coolwsd" __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=4058510, futex_word=0x7f675285c910)
at ./nptl/futex-internal.c:57
(gdb) t a a bt
Thread 1 (Thread 0x7f67528f0840 (LWP 4058508) "coolwsd"):
#0 __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=4058510, futex_word=0x7f675285c910) at ./nptl/futex-internal.c:57
#1 __futex_abstimed_wait_common (cancel=true, private=128, abstime=0x0, clockid=0, expected=4058510, futex_word=0x7f675285c910) at ./nptl/futex-internal.c:87
#2 __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7f675285c910, expected=4058510, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=128) at ./nptl/futex-internal.c:139
#3 0x00007f67529cd6a4 in __pthread_clockjoin_ex (threadid=140081742857792, thread_return=0x0, clockid=0, abstime=0x0, block=<optimized out>) at ./nptl/pthread_join_common.c:105
#4 0x00007f6752d42337 in std:🧵:join() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x000055775c5fa8e0 in SocketPoll::joinThread (this=0x55775cc9b090) at net/Socket.cpp:282
#6 0x000055775c5c8121 in UnitBase::endTest (this=this@entry=0x55775cc0fe80, reason="") at common/Unit.cpp:545
#7 0x00007f67528df61f in UnitWSDClient::endTest (this=0x55775cc0fe80, reason="") at ./UnitWSDClient.hpp:118
#8 0x000055775c5cc4d1 in UnitBase::exitTest (this=0x55775cc0fe80, result=result@entry=UnitBase::TestResult::Ok, reason="") at common/Unit.cpp:486
#9 0x00007f67528d1fa3 in UnitWOPIFileUrl::invokeWSDTest (this=0x55775cc0fe80) at UnitWOPIFileUrl.cpp:269
#10 0x000055775c4accdb in UnitWSD::invokeTest (this=0x55775cc0fe80) at ./common/Unit.hpp:318
#11 0x000055775c4a38cd in COOLWSD::innerMain (this=0x7ffd34248650) at wsd/COOLWSD.cpp:5459
#12 0x000055775c4a59db in COOLWSD::main (this=<optimized out>) at wsd/COOLWSD.cpp:5706
#13 0x00007f6753ab0877 in Poco::Util::Application::run() () from /lib/libPocoUtil.so.80
#14 0x000055775c48316c in main (argc=14, argv=0x7ffd34248898) at wsd/COOLWSD.cpp:5845
Change-Id: If6162690462719f14a35241604f8a59b38a806c0
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
These only served to delete the Unit singletons,
but since we have GlobalArray, deleting them
isn't needed.
Change-Id: Ia2e53a1e3b43707196f45c06c38c6bb664c18e29
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
This is needed so we stop the DocBroker of
the old test, which is now finished.
Change-Id: I05df85fbbeca254928cd9a140198e7f4ae89fec8
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Clang-tidy thinks, incorrectly, that an
assert(false) can be replaced with static_assert.
While the assert(false) in question is a trap
for code paths that shouldn't happen,
static_assert is a compile-time check that
has nothing to do with the execution path.
Since the assert in question is used in a
macro, it shows up countless times where
said macro is used. This silences it.
Change-Id: I19b35da6332a06335cc83b0584505a42741de97f
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Apply the test filter on all tests,
not just the first.
Change-Id: Ib34e90e883f5de2ddcf04c710f433cb54677575d
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Now that we may have multiple tests in a
single unit-test module, we should call
UnitWSD::configure for each one, not just
once at the start. Each test can modify
the configuration settings to meet its
test conditions.
Change-Id: I08de2d998edee5b4cbade08f2496196b596a8600
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
When invoking exitTest it's useful to know
something about the reason. Whether it's
because the test passed or timed out,
it's useful to log this information.
Change-Id: I8e8ae525b7c2ef1de2e394d08107341cdc87c008
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Now that multiple tests and filtering are
supported, it's useful to know what tests
exist in each unit-test module.
Change-Id: Ifaa7eccabab6b23a57edf2786c0cd726ab0265db
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Using the envar COOL_TEST_OPTIONS, which is
provisioned to support other options than
just filtering, it is now possible to
only run the tests with names partially
matching the filter's case-insensitive
string.
Change-Id: I6168887677fd0fddd72bac2538837615b10b9fae
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
The event we trigger when we detect data-loss
is best named to reflect that fact.
And since we can override the behavior,
for example if the test expected to trigger
the data-loss detection, then we can signal
the non-failure by the return value.
Change-Id: I67ca69ae783c956cfdd14d54dab5efb7cc3d258c
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
So far, we assumed only json objects are
used, but that's only because we didn't
have arrays. This adds support for detecting
both json arrays and objects alike.
Change-Id: If91bf092ab95869298e90e4f071505471ab1db19
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Since we can have multiple tests in a single
unit-test .so, we need to merge the results
of each test into a single result that is
used when we exit the process and flag for
failure or success.
Change-Id: Ia49f5542efd6dd998b61c17965fd3fe3245159ba
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Since we no longer need to set the handle,
this function is an initialization of the
given test, before running it.
Change-Id: Ia6fb16b06dd548977fcfcc35a81ac37d979be29d
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
This adds support for multiple tests
within a single unit-test .so.
We did have many, many tests within
the converted "old style" tests already.
Except, they couldn't support the proper
event-driven tests, nor were they running
as fast as possible. They also blocked the
main thread in COOLWSD.
With this support, we can now avoid
creating a new .so for each test case.
This will reduce the effort to add new
tests and the build time. In addition,
the execution of each unit-test is
dominated by the initialization, which
takes in the order of 5 seconds. Running
multiple tests after this high load time
reduces the per-test average time.
Later we will support listing tests,
running particular tests (i.e. filtering)
and other debugging and troubleshooting
facilities.
Change-Id: I7be43994265ebabdb5d379f7726bb9bd7f78795a
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
We now properly cleanup unit-tests .so libs.
This helps having multiple tests by making
the dlhandle an independent variable of
all the tests.
Change-Id: Ifc8db400aebfe8ea41dcc4df2d11856c25b36074
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
This adds support to having multiple tests in
a single unit-test .so.
Change-Id: I37526484e8a692b25393f659dedd846eedc22733
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
And make arguments explicit for a setReadOnly
and setAllowChangeComment.
Default parameters are useful for backward
compatibility, when changing an API. But
they provide no benefit when the function
in question is new and is called a couple
times anyway. Code is harder to read with
default parameters because one has to
either guess (bad) or check (wasteful).
Change-Id: I105df928f4fb73e7c341218af11903bf1ee33943
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
Normally, we should exit a test with a single result:
either a success or a failure. It is, however,
possible to have an early success that forgoes
proper cleanups and cause subsequent failures.
Here, we at least log these cases, because it
could unintentionally hide real failures.
Change-Id: I17e6365bd54b3f7336976fb51437776811733eb8
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>