Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic prep #1792

Merged
merged 23 commits into from
Nov 4, 2024
Merged

Basic prep #1792

merged 23 commits into from
Nov 4, 2024

Conversation

CxRes
Copy link
Collaborator

@CxRes CxRes commented Aug 30, 2024

This PR implements PREP/Solid-PREP as an alternative to the existing notifications mechanism in NSS which was deprecated for security reasons.

PREP/Solid-PREP bring many improvements to the existing notifications mechanism in NSS, as illustrated in this table:

WebSockets API Solid Notifications PREP/Solid-PREP
Transport WebSockets Multiple HTTP Streaming
Discovery Headers Discovery Resource
Link Headers
Headers
Initialization
AuthN/Z No Yes Yes
RoundTrips 2 1-2 01-1
Features
State No Yes Yes
Rate No Optional No
Termination
End Time Undefined Negotiated Negotiated
Closing Undefined Automatic Automatic
Notifications
Format Custom RDF/AS2 Any2
Target Yes Yes Yes
Activity No Yes Yes
Object URL No Yes Yes
Time No Yes Yes
Content Negotiation No Yes Yes
Deltas No In Development Optional
Error Messages No In Development In Development

The last published version of Solid Protocol and the ED mentions that WebSockets-API that NSS uses does not include an authentication mechanism. That was the main reasons why Solid-CG's notifications panel deprecated the WebSockets-API and transitioned Solid to the Solid Notifications Protocol. Solid-PREP is part of this incubation work in the CG.

Footnotes

  1. PREP can fetch notifications along with the representation body in the response.

  2. Solid-PREP serves notifications that are identical to Solid Notifications Protocol, with suitable content negotiation requesting an RDF media-type.

CxRes added 3 commits August 31, 2024 01:28
Implements Per Resource Events notifications in Node Solid Server.

Implementation Notes:
+ Uses `--experimental-require-module` to load esm packages natively. Requires node > 22.0.0. Start scripts and test invocations have been appropriately modified.
+ NSS converts strings into an older streaming format which was not being detected by Express-PREP. Express-PREP was modified to ask the user if the body provided is a stream, thus circumventing this issue.
+ Notifications are triggered from a common middleware, which is invoked after the response has been succesfully sent.
+ Uses Express PREP supplied default template for notifications.
Add Solid/Activity Streams format notifications:
+ Provides notifictions in JSON-LD and Turtle.
+ Extends notifications to PUT and POST methods.
+ Add Event-ID header field to the response of a write method.
@CxRes
Copy link
Collaborator Author

CxRes commented Aug 30, 2024

I do not understand why nyc is failing with EEXIST. Will need some help here as I am blind testing on Windows.

nyc does not work with ESM called with require().
@CxRes
Copy link
Collaborator Author

CxRes commented Aug 30, 2024

If I disable nyc (now replaced with c8), I get just one other error https://github.com/CxRes/node-solid-server/actions/runs/10639483327/job/29497511727#step:12:702

I am not sure if this error is an artifact of running tests in my own repo or actually a bug!

@CxRes CxRes requested a review from bourgeoa August 30, 2024 21:57
Parent path is correctly determined only for non root resources. Parent notifications are only generated when resources have a parent.
Node 20.17.0 LTS supports require(ESM). Therefore, allowing current Node LTS as well.
When checking response `Content-Type` during integration tests, relaxed all media-type values to regex.
@CxRes CxRes force-pushed the basic-prep branch 2 times, most recently from 5c7f336 to 6355d9e Compare September 9, 2024 01:01
Picks the repository from where the PR branch exists.
@CxRes
Copy link
Collaborator Author

CxRes commented Sep 9, 2024

Tests pass. Phew!

I would need guidance for writing tests specific to notifications.

Also need to check with reviewers if they are happy migrating to Node 20 (which is the active LTS).

@bourgeoa
Copy link
Member

bourgeoa commented Sep 9, 2024

Tests pass. Phew!

Well done.

I would need guidance for writing tests specific to notifications.

I don't know what to say.

  • unit express-prep test should not be included in NSS
  • reading from your code I would run
    • some tests on notification handler
    • integrated tests for the remaining
      • set notification
      • tests on the response

Also need to check with reviewers if they are happy migrating to Node 20 (which is the active LTS).

  • I don't see any issue with that, except that it may break some implementation that are unable to move to the new node minimal standard.
    This is less an issue if running on docker nowadays.
    I will have to check if solidcommunity.net can run on it.

CxRes added 2 commits October 8, 2024 08:07
Fixes the following issues:
+ Linebreaks are not sent after boundaries in the same notification, instead they are sent at the start of notification.
+ DELETE triggers lastEvent only if the path for notification is the same as the one where events occured.
@CxRes
Copy link
Collaborator Author

CxRes commented Oct 9, 2024

I added tests as well (coverage, though not 100%, covers all relevant functionality), which means that this PR should have been ready to merge.

However, one surface test, which has absolutely nothing to do with this PR, fails! The failure only happens with the commit that adds tests.

@@ -1,3 +1,3 @@
#!/usr/bin/env node
#!/usr/bin/env -S node --experimental-require-module
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this needed?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed because the middlewares for PREP use ESM syntax and NSS is CJS. This magic flag allows importing ESM code in CJS code.

This will also prove generally useful, since it creates a path to migrate NSS to ESM one file at a time.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand the need to support your ESM middleware, but adding --experimental-require-module project-wide isn’t the best approach. Since it’s still experimental, it could introduce unpredictable behavior in different environments or future Node.js versions.

To ensure long-term stability and compatibility with the existing CJS modules, it’s better to bundle your libraries with a transpiler. This will let you use ESM without requiring the entire project to rely on an experimental flag

@melvincarvalho
Copy link
Contributor

Hi @CxRes, during the call today you mentioned wanting a review. I'd be happy to try and help. Just a quick question—do you have an issue or a high-level overview tied to this, or a bit of context?

@melvincarvalho
Copy link
Contributor

Could this be a switch for NSS. For example Websocket uses options.live for live updates. Perhaps options.prep could go in the config for prep (if it isnt already)?

@CxRes
Copy link
Collaborator Author

CxRes commented Oct 10, 2024

@melvincarvalho Thanks for the offer!

The high level overview are the specifications:

https://cxres.github.io/prep/draft-gupta-httpbis-per-resource-events.html
and
https://solid.github.io/solid-prep/protocol/

Re Switch: There is no switch right now. I don't think one is even needed, because everything is HTTP and unless the request has the specific header (Accept-Events), the GET response is not modified. OTOH, I am happy to add one, if one can show me how to access the switch variables in the code. Its basically wrapping the middleware invocation in 3 files in if-else statements.

The other enhancement that I would like to investigate (not for this PR) is a way for the user to specify how to turn on and off PREP for a resource and globally for a POD or specify which media-types to use for notifications, maybe using description resource or ACLs.

I don't want to rush you, but I would really like to merge the code soon, though, because I want to make the case for it working at the next IETF and those discussions have already started (and maybe even coax one or two developers to implement clients for it, which IMHO is very easy with the libraries I provide). This was meant to be ready at the last IETF, and as you are already aware, been held up for many months. If the code is not breaking anything, I am happy to make improvements over the winter.

lib/handlers/get.js Outdated Show resolved Hide resolved
@melvincarvalho
Copy link
Contributor

I am happy to add one, if one can show me how to access the switch variables in the code

Thanks! Here's how it's handled for websockets—might be a similar approach for this.

name: 'no-live',

@melvincarvalho
Copy link
Contributor

This also needs a version bump, consistent with semver

PREP can be disabled when the server is started with the `--no-prep` flag.
@CxRes
Copy link
Collaborator Author

CxRes commented Oct 10, 2024

This also needs a version bump, consistent with semver

Bumping is the job of the maintainers ;-) !

@CxRes
Copy link
Collaborator Author

CxRes commented Oct 10, 2024

Yay! Tests are passing again. Thanks for the flag tip @melvincarvalho!

@jeff-zucker
Copy link
Member

Again, no user is obligated or forced to use PREP, which triggers only when they add the specific request header during GET. This is not even a breaking change.

I agree. Since it is not a breaking change and impacts no one except those who want to experiment with it, we should implement it ASAP. Talk of future possibilities like HTTP/2 is a total red-herring and not relevant to adoption of the hard work that exists now.

Copy link
Member

@csarven csarven left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have a strong opinion on what features should be optional or available by default (for NSS). So, this is more of a reflection on the PR and current thread. Approving it strictly because it is based on a Solid CG work item; developed by that item's primary author; tests passing; there is no strong objection to not have this feature.


If more testing is necessary, it should be qualified. More concrete todos. For the time being, I'm not aware of other "seasonal" testing, maturing this (or any) feature over a full version, or even having it deployed widely before it can be part of NSS core / default. If there is a criteria along those, I'd appreciate pointers.

I'd just suggest that if this PR does not pose new privacy and/or security concerns whether outlined in NSS or in relevant specifications, then it is probably acceptable, and improvements can come in over time.

I suggest a quick middle ground. Merge the PR, and unless any major issues come up until the next NSS release, let it be there. So, that means in the mean time, folks can do tests against "live" servers, irrespective of the testing method (automated, semi-automated, or manual), and report back with success/fail. If there is a clear process already on releases, then best to ignore what I wrote and refer to that instead =)

@elf-pavlik
Copy link
Contributor

elf-pavlik commented Oct 12, 2024

Since NSS is currently running on HTTP/1.1, maybe it's not ideal to make this the default right now.

What stops someone from running NSS behind a reverse proxy that handles HTTP/2?

If the problem is with having PREP on by default, I suggest merging this PR without the default and creating a separate PR that makes it on by default, dealing with that detail with input from people who will update their deployments.

@melvincarvalho
Copy link
Contributor

@csarven , @bourgeoa Before approving, please take into account this limitation from the spec:

'Due to the limits on connections per domain, the Per Resource Events Protocol is not suitable for use with HTTP/1.1.'

I strongly agree with this point. The assumption that the best place to get updates is directly from the resource is, in practice, problematic. It can lead to an excessive number of open connections without efficient multiplexing. A dedicated updater service is a far more scalable and efficient approach, as it avoids the overhead and connection limits that PREP introduces.

I also recommend thoroughly reviewing the code and demonstrating a working example before moving forward with approval, as this hasn't been done yet.

@csarven
Copy link
Member

csarven commented Oct 16, 2024

I'd just like to mention that one of Solid CG's positions on https://github.com/solid/solid-spec/blob/master/api-websockets.md can be found in https://solidproject.org/ED/protocol#notifications-protocol :

The following is non-normative.

The Solid WebSockets API (Unofficial Draft) [SOLID-WEBSOCKETS-API] has been the common notification protocol for many years. That draft does not include an authentication mechanism, and therefore this Protocol has transitioned to require the Solid Notifications Protocol.

Existing client and server implementations should begin providing support for the new notification protocol while supporting backwards compatibility, as appropriate.

In fact, the Solid CG kicked off the Solid Notifications Panel to address the shortcomings with SOLID-WEBSOCKETS-API. One of the outputs was the Solid Notifications Protocol, and a number of channel types. (Aside: The Solid Notifications Protocol was listed as one of the input documents for the LWS WG charter.)

With respect to WebSockets, the work on WebSocketChannel channel type that works part of Solid Notifications Protocol is what's deemed to be the way to approach WebSockets in Solid Protocol.

And just to clarify, I mention all of this not because NSS (or its maintainers, we, anyone) "must" follow the above but that we/they should be mindful of the path that's been in the works for a number of years now by the CG. So, all things considered, there should be more energy put into adopting the most recent work while working on deprecating the older work. This shouldn't be a debate at this point. We're past that. If there is conflicting or stronger data, that can be shared (publicly linkable) and reviewed.

That aside, Solid-PREP is part of the incubation work in the CG: https://solidproject.org/TR/ and it is not proposed to replace WebSockets in the Solid Protocol (AFAIK) but that it can be adopted by implementers (servers, applications..) that wish to support it in their products.


Regarding:

Due to the limits on connections per domain

As I understand it, minor clarification: the browser limits apply to per host, not domain.

best place to get updates is directly from the resource is, in practice, problematic.

Can we study those problems based on practice? As I understand it, Server-sent Events is one example where it uses the resource directly to get updates. But if some problematic practices are not known to WHATWG, perhaps it'd be best to bring up to them.

@CxRes
Copy link
Collaborator Author

CxRes commented Oct 16, 2024

@csarven Thanks for bringing your wealth of knowledge about Solid to provide this historic retrospective.

I have also updated the topmost comment to explain the reason we need another notifications mechanism in NSS, along with a table comparing the various notification mechanisms available in Solid.

As I understand it, minor clarification: the browser limits apply to per host, not domain.

Thanks for the correction, I shall update have updated the specification document accordingly.

Can we study those problems based on practice?

That is why this PR is so important to merge. Having working servers imho is the best way to compare different approaches in the real world.

PREP dependencies have been updated to the latest versions that use the newest HTTP Structured Fields specification RFC9651.
@melvincarvalho
Copy link
Contributor

I have also updated the topmost comment

Just a quick note on the comparison table.

It’s worth pointing out that WebSockets inherits its AuthN/AuthZ from HTTPS, since WSS is an HTTP upgrade protocol. So, the suggestion that it lacks these by design isn’t quite accurate. It’s more a matter of aligning it properly or fixing the bugs to ensure everything works as expected, security-wise.

Given that we’re quite thinly spread at the moment, I think it’s important we focus on getting the current system fully functional and bug-free.

@melvincarvalho
Copy link
Contributor

Please add to the comparison table which versions of HTTP each column is suitable for.

This limitation from the spec should also be included in the comparison, especially since NSS runs on HTTP/1.1:

"Due to the limits on connections per domain, the Per Resource Events Protocol is not suitable for use with HTTP/1.1."

@elf-pavlik
Copy link
Contributor

especially since NSS runs on HTTP/1.1

#1792 (comment)

What stops someone from running NSS behind a reverse proxy that handles HTTP/2?

@melvincarvalho, I see you keep claiming that NSS runs on HTTP/1.1 could you please clarify what stops one from deploying it behind a reverse proxy Nginx/HAproxy/Traefik/ you name it, which will handle the HTTP/2?

CxRes added 10 commits October 23, 2024 17:33
Notifications on the parent container are now sent when the parent is root.
Notification emitted when a resource is created as a result of POST on a container has  activity type set to `as:Add`.
Notification emitted when a resource is created as a result of POST on a container sets the `target` property to the `Location` header, consistent with the requirements of `as:Add`.
Notification emitted on the container when a resource in it is removed, sets the `origin` property to the location of the removed resource, consistent with the requirements of `as:Remove`.
Added a test to check that a PREP notification is correctly emitted when a container is created with POST.
This fixes "undefined" notifications being emitted when the requested notification format is not Solid PREP RDF.
`req.url` is not overwritten anymore when PUT is used to create a container. This allows subsequent middlewares to have access to the original request URL.
Added tests to check that PREP notifications are correctly emitted on a container, when a container inside it is created or deleted.
Added debugging statements for failed notifications. Also clarified that notification errors should not be passed on to Express for error handling, since the mutation that triggered the notification was already successful.
When the negotiated media-type for notifications is not RDF, the `location` property is correctly set to the `Location` header in the generated notifications. Express-PREP now handles this by default.
@melvincarvalho
Copy link
Contributor

@elf-pavlik, just to clarify, NSS does run on HTTP/1.1. This is a fact, not a claim.

Regarding reverse proxying for HTTP/2:

  1. Reverse Proxy Doesn’t Fix the Core Issue:

    • Even with a reverse proxy in front, NSS still operates on HTTP/1.1. The underlying server hasn’t changed, and the reliance on HTTP/1.1 remains. Switching NSS to HTTP/2 requires proper testing and a major version bump, as everyone using NSS today is running it on HTTP/1.1.
  2. Added Complexity:

    • Requiring a reverse proxy makes the installation process much harder. Instead of a simple NSS setup, users now have to configure and maintain a separate reverse proxy, increasing the burden on those without dedicated DevOps teams. This added complexity particularly impacts hobbyists, those running NSS on low-powered devices, or even on phones. What was once a lightweight, easy-to-install server becomes a multi-layer system that requires significant additional setup and knowledge.
  3. Increased Debugging and Moving Parts:

    • Introducing a reverse proxy adds more moving parts, increasing the chances of bugs or misconfigurations across the system. Each additional layer requires more effort to debug, monitor, and maintain. Additionally, debugging HTTP/2 is much more complex than HTTP/1.1 due to its multiplexed streams and different handling of connections. If something breaks between the reverse proxy and NSS, identifying the issue is more challenging with HTTP/2, especially for users unfamiliar with its intricacies.

In short, reverse proxies don’t solve the issue. There will always be users who need NSS to remain lightweight and simple, running on HTTP/1.1 without the overhead of added layers, more complex installations, or potential issues.

@melvincarvalho
Copy link
Contributor

This also needs a version bump, consistent with semver

Bumping is the job of the maintainers ;-) !

Just a quick note about versioning. 😊 While maintainers typically handle the final bump, semantic versioning does ask that a PR proposes the right version change, especially if there are any breaking changes or big shifts involved.

In this case, if there’s any shift towards HTTP/2 or other significant updates, it’s probably worth suggesting a major version bump (moving to 6.x) to reflect that. API changes or anything that might affect existing users would definitely fall under that category.

For stability, I’d suggest keeping the current 5.x branch free of these changes. Maybe experimental work could go in a new branch or 6.x? That way, we keep things smooth for users on 5.x who depend on everything working just as it does today.

@elf-pavlik
Copy link
Contributor

Even with a reverse proxy in front, NSS still operates on HTTP/1.1. The underlying server hasn’t changed, and the reliance on HTTP/1.1 remains.

This doesn't matter for the Notification Receiver in a web browser since they will connect over HTTP/2

Requiring a reverse proxy makes the installation process much harder. Instead of a simple NSS setup, users now have to configure and maintain a separate reverse proxy, increasing the burden on those without dedicated DevOps teams.

This needs more details, including the auto-renewal of certificates. Modern reverse proxies handle that automatically. Two complete setups would need to be compared side by side.

This added complexity particularly impacts hobbyists, those running NSS on low-powered devices, or even on phones.

They don't need to enable PERP. If the argument is about having it on by default, I think a reasonable step, which I already suggested, would be to merge it with PREP disabled by default. At the same time, someone could provide deployment instructions, playbook, flake, compose file (you name it), which would make it easy to deploy it behind a reverse proxy and use config that enables PREP.

Looking at https://github.com/nodeSolidServer/node-solid-server/graphs/contributors
It seems like @bourgeoa should have the final say on this PR. Until then, I think there is no point on further reiterating the same opinions.

Copy link
Member

@bourgeoa bourgeoa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a breaking change which makes the conformance tests to break

bourgeoa@DESKTOP-PIRJOCS:/mnt/d/github/specification-tests$ ./run.sh nss
Running tests on nss and reporting to /mnt/d/github/specification-tests/reports/nss
Using default tag: latest
latest: Pulling from solidproject/conformance-test-harness
Digest: sha256:7d07eab722244e416fd01b4af058f373988067c7612d6dd661f27bb5a0211f88
Status: Image is up to date for solidproject/conformance-test-harness:latest
docker.io/solidproject/conformance-test-harness:latest
RUNNING: docker run -i --rm -v /mnt/d/github/specification-tests/reports/nss:/reports --env-file=nss.env solidproject/conformance-test-harness --output=/reports --target=https://github.com/solid/conformance-test-harness/nss
Oct 26, 2024 4:40:27 PM org.jboss.logmanager.JBossLoggerFinder getLogger
ERROR: The LogManager accessed before the "java.util.logging.manager" system property was set to "org.jboss.logmanager.LogManager". Results may be unexpected.
Oct 26, 2024 4:40:28 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 1.1.19-SNAPSHOT
Oct 26, 2024 4:40:28 PM io.quarkus.bootstrap.runner.Timing printStartupTime
INFO: testharness 1.1.19-SNAPSHOT on JVM (powered by Quarkus 3.8.2) started in 1.029s.
Oct 26, 2024 4:40:28 PM io.quarkus.bootstrap.runner.Timing printStartupTime
INFO: Profile prod activated.
Oct 26, 2024 4:40:28 PM io.quarkus.bootstrap.runner.Timing printStartupTime
INFO: Installed features: [cdi, config-yaml, hibernate-validator, logging-json, qute, smallrye-context-propagation]
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2024-10-26 16:40:28,677 INFO  [org.sol.tes.con.Config] (main) Sources:            [https://solidproject.org/TR/protocol, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl, https://github.com/solid-contrib/specification-tests/blob/main/protocol/requirement-comments.ttl, https://solidproject.org/TR/wac, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/requirement-comments.ttl, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/wac-spec-additions.ttl]
2024-10-26 16:40:28,683 INFO  [org.sol.tes.con.Config] (main) Path mappings:      [https://github.com/solid-contrib/specification-tests/blob/main => file:///data]
2024-10-26 16:40:28,684 INFO  [org.sol.tes.con.Config] (main) Output directory:   /reports
2024-10-26 16:40:28,684 INFO  [org.sol.tes.con.Config] (main) Subjects URL:       file:/data/test-subjects.ttl
2024-10-26 16:40:28,684 INFO  [org.sol.tes.con.Config] (main) Target server:      https://github.com/solid/conformance-test-harness/nss
2024-10-26 16:40:28,684 INFO  [org.sol.tes.con.Config] (main) Connect timeout:    5000
2024-10-26 16:40:28,685 INFO  [org.sol.tes.con.Config] (main) Read timeout:       5000
2024-10-26 16:40:28,685 INFO  [org.sol.tes.con.Config] (main) Max threads:        8
2024-10-26 16:40:28,685 INFO  [org.sol.tes.con.Config] (main) Alice WebID:        https://alice.solidcommunity.net:8443/profile/card#me
2024-10-26 16:40:28,685 INFO  [org.sol.tes.con.Config] (main) Alice IDP:          https://solidcommunity.net:8443/
2024-10-26 16:40:28,686 INFO  [org.sol.tes.con.Config] (main) Bob WebID:          https://bob.solidcommunity.net:8443/profile/card#me
2024-10-26 16:40:28,686 INFO  [org.sol.tes.con.Config] (main) Bob IDP:            https://solidcommunity.net:8443/
2024-10-26 16:40:28,687 INFO  [org.sol.tes.con.Config] (main) Solid IdP:          null
2024-10-26 16:40:28,687 INFO  [org.sol.tes.con.Config] (main) Server root:        null
2024-10-26 16:40:28,688 INFO  [org.sol.tes.con.Config] (main) Test container:     null
2024-10-26 16:40:28,688 INFO  [org.sol.tes.con.Config] (main) Tolerable failures: null
2024-10-26 16:40:28,688 INFO  [org.sol.tes.con.Config] (main) Allow self-signed:  false
2024-10-26 16:40:28,769 INFO  [org.sol.tes.ConformanceTestHarness] (main) Solid Specification Conformance Test Harness: 1.1.19-SNAPSHOT
2024-10-26 16:40:28,808 INFO  [org.sol.tes.ConformanceTestHarness] (main) ===================== DISCOVER TESTS ========================
2024-10-26 16:40:28,808 INFO  [org.sol.tes.uti.DataRepository] (main) Loading https://solidproject.org/TR/protocol with base https://solidproject.org/TR/protocol
2024-10-26 16:40:29,994 INFO  [org.sol.tes.uti.DataRepository] (main) Loading file:/data/protocol/solid-protocol-test-manifest.ttl with base https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl
2024-10-26 16:40:30,039 INFO  [org.sol.tes.uti.DataRepository] (main) Loading file:/data/protocol/requirement-comments.ttl with base https://github.com/solid-contrib/specification-tests/blob/main/protocol/requirement-comments.ttl
2024-10-26 16:40:30,045 INFO  [org.sol.tes.uti.DataRepository] (main) Loading https://solidproject.org/TR/wac with base https://solidproject.org/TR/wac
2024-10-26 16:40:30,280 INFO  [org.sol.tes.uti.DataRepository] (main) Loading file:/data/web-access-control/web-access-control-test-manifest.ttl with base https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl
2024-10-26 16:40:30,287 INFO  [org.sol.tes.uti.DataRepository] (main) Loading file:/data/web-access-control/requirement-comments.ttl with base https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/requirement-comments.ttl
2024-10-26 16:40:30,289 INFO  [org.sol.tes.uti.DataRepository] (main) Loading file:/data/web-access-control/wac-spec-additions.ttl with base https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/wac-spec-additions.ttl
2024-10-26 16:40:30,293 INFO  [org.sol.tes.dis.TestSuiteDescription] (main) Test suite version: 0.0.19 2024-03-21
2024-10-26 16:40:30,300 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== TEST CASES FOUND: 41 - [https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#if-none-match-asterisk, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-type-reject, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#slash-semantics-exclude, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#authentication-header, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-turtle, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-jsonld, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-named-graphs, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#writing-resource-containment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#describedby-unique, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#method-not-allowed, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#post-uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#slug-uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#read-method-allow, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#delete-protect-nonempty-container, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#delete-remove-containment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#post-target-not-found, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-simple-requests, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-preflight-requests, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-access-control-headers, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-acao-vary, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-options, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-enumerate, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-accept-acah, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#read-method-support, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-none, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-access-to, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-default, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-access-to-default, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#protected-operation-acl-propagation, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-header-exists, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-user-access-direct, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-user-access-indirect, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-public-access-direct, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-public-access-indirect, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-bob, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-agent, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-public, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-agent, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-bob, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-public]
2024-10-26 16:40:30,316 INFO  [org.sol.tes.con.TestSubject] (main) TestSubject https://github.com/solid/conformance-test-harness/nss
2024-10-26 16:40:30,317 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== SKIP TAGS:             [acp]
2024-10-26 16:40:30,317 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== APPLY NAME FILTERS:    null
2024-10-26 16:40:30,317 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== APPLY STATUS FILTERS:  null
2024-10-26 16:40:30,319 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== FILTERED TEST CASES (41): [https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#if-none-match-asterisk, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-type-reject, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#slash-semantics-exclude, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#authentication-header, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-turtle, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-jsonld, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#content-negotiation-named-graphs, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#writing-resource-containment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#describedby-unique, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#method-not-allowed, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#post-uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#slug-uri-assignment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#read-method-allow, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#delete-protect-nonempty-container, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#delete-remove-containment, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#post-target-not-found, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-simple-requests, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-preflight-requests, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-access-control-headers, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-acao-vary, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-options, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-enumerate, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#cors-accept-acah, https://github.com/solid-contrib/specification-tests/blob/main/protocol/solid-protocol-test-manifest.ttl#read-method-support, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-none, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-access-to, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-default, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#acl-object-access-to-default, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#protected-operation-acl-propagation, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-header-exists, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-user-access-direct, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-user-access-indirect, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-public-access-direct, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#server-wac-allow-public-access-indirect, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-bob, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-agent, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#read-access-public, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-agent, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-bob, https://github.com/solid-contrib/specification-tests/blob/main/web-access-control/web-access-control-test-manifest.ttl#write-access-public]
2024-10-26 16:40:30,328 INFO  [org.sol.tes.ConformanceTestHarness] (main) ==== RUNNING TEST CASES (41): [file:///data/protocol/writing-resource/if-none-match-asterisk.feature, file:///data/protocol/writing-resource/content-type-reject.feature, file:///data/protocol/writing-resource/slash-semantics-exclude.feature, file:///data/protocol/authentication/header.feature, file:///data/protocol/content-negotiation/content-negotiation-turtle.feature, file:///data/protocol/content-negotiation/content-negotiation-jsonld.feature, file:///data/protocol/content-negotiation/content-negotiation-named-graphs.feature, file:///data/protocol/writing-resource/uri-assignment.feature, file:///data/protocol/writing-resource/containment.feature, file:///data/protocol/resources/describedby-unique.feature, file:///data/protocol/read-write-resource/method-not-allowed.feature, file:///data/protocol/read-write-resource/post-uri-assignment.feature, file:///data/protocol/read-write-resource/post-uri-assignment-slug.feature, file:///data/protocol/read-write-resource/read-method-allow.feature, file:///data/protocol/writing-resource/delete-protect-nonempty-container.feature, file:///data/protocol/writing-resource/delete-remove-containment.feature, file:///data/protocol/writing-resource/post-target-not-found.feature, file:///data/protocol/cors/simple-requests.feature, file:///data/protocol/cors/preflight-requests.feature, file:///data/protocol/cors/access-control-headers.feature, file:///data/protocol/cors/acao-vary.feature, file:///data/protocol/cors/preflight.feature, file:///data/protocol/cors/enumerate-headers.feature, file:///data/protocol/cors/accept-acah.feature, file:///data/protocol/read-write-resource/read-method-support.feature, file:///data/web-access-control/acl-object/container-none.feature, file:///data/web-access-control/acl-object/container-access-to.feature, file:///data/web-access-control/acl-object/container-default.feature, file:///data/web-access-control/acl-object/container-access-to-default.feature, file:///data/web-access-control/protected-operation/acl-propagation.feature, file:///data/web-access-control/wac-allow/header-exists.feature, file:///data/web-access-control/wac-allow/user-access-direct.feature, file:///data/web-access-control/wac-allow/user-access-indirect.feature, file:///data/web-access-control/wac-allow/public-access-direct.feature, file:///data/web-access-control/wac-allow/public-access-indirect.feature, file:///data/web-access-control/protected-operation/read-access-bob.feature, file:///data/web-access-control/protected-operation/read-access-agent.feature, file:///data/web-access-control/protected-operation/read-access-public.feature, file:///data/web-access-control/protected-operation/write-access-agent.feature, file:///data/web-access-control/protected-operation/write-access-bob.feature, file:///data/web-access-control/protected-operation/write-access-public.feature]
2024-10-26 16:40:30,328 INFO  [org.sol.tes.ConformanceTestHarness] (main) ===================== REGISTER CLIENTS ========================
2024-10-26 16:40:30,923 INFO  [org.sol.tes.htt.AuthManager] (main) Loaded WebID Document for [https://alice.solidcommunity.net:8443/profile/card#me]
2024-10-26 16:40:31,375 INFO  [org.sol.tes.htt.AuthManager] (main) Login and get access token for alice: [https://alice.solidcommunity.net:8443/profile/card#me]
2024-10-26 16:40:31,935 DEBUG [org.sol.tes.htt.Client] (main) Request access token for alice using grant type authorization_code
2024-10-26 16:40:32,004 DEBUG [org.sol.tes.htt.Client] (main) request:
  > POST https://solidcommunity.net:8443/token
  > Accept: application/json
  > Authorization: Basic ***NjM2E=
  > Content-Type: application/x-www-form-urlencoded
  > DPoP: ***6KQOaw
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:32,072 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 200
  < accept-events:
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 1744
  < content-type: application/json; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:32 GMT
  < etag: W/"6d0-FofbfBQl1MWGri3bW+Wvqi/GXjc"
  < keep-alive: timeout=5
  < vary: Accept, Authorization, Origin
  < x-powered-by: solid-server/5.7.11
{"access_token":"***T7XUbQ","token_type":"Bearer","expires_in":1209600,"refresh_token":"***addaba","id_token":"***2KrnOw"}
2024-10-26 16:40:32,103 INFO  [org.sol.tes.htt.Client] (main) Access token for alice - expiration: NumericDate{1731170432 -> Nov 9, 2024, 4:40:32 PM UTC}
2024-10-26 16:40:32,495 INFO  [org.sol.tes.htt.AuthManager] (main) Loaded WebID Document for [https://bob.solidcommunity.net:8443/profile/card#me]
2024-10-26 16:40:32,836 INFO  [org.sol.tes.htt.AuthManager] (main) Login and get access token for bob: [https://bob.solidcommunity.net:8443/profile/card#me]
2024-10-26 16:40:33,345 DEBUG [org.sol.tes.htt.Client] (main) Request access token for bob using grant type authorization_code
2024-10-26 16:40:33,358 DEBUG [org.sol.tes.htt.Client] (main) request:
  > POST https://solidcommunity.net:8443/token
  > Accept: application/json
  > Authorization: Basic ***NkYWI=
  > Content-Type: application/x-www-form-urlencoded
  > DPoP: ***qd0CxQ
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:33,428 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 200
  < accept-events:
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 1737
  < content-type: application/json; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:34 GMT
  < etag: W/"6c9-nEbfxvewOnLE91AKYNo8XiF0hoQ"
  < keep-alive: timeout=5
  < vary: Accept, Authorization, Origin
  < x-powered-by: solid-server/5.7.11
{"access_token":"***bzQBJw","token_type":"Bearer","expires_in":1209600,"refresh_token":"***0d5b50","id_token":"***o53CGw"}
2024-10-26 16:40:33,431 INFO  [org.sol.tes.htt.Client] (main) Access token for bob - expiration: NumericDate{1731170434 -> Nov 9, 2024, 4:40:34 PM UTC}
2024-10-26 16:40:33,432 INFO  [org.sol.tes.ConformanceTestHarness] (main) ===================== PREPARE SERVER ========================
2024-10-26 16:40:33,595 INFO  [org.sol.tes.con.TestSubject] (main) Read WebID Document for [https://alice.solidcommunity.net:8443/profile/card#me]
2024-10-26 16:40:33,599 INFO  [org.sol.tes.con.TestSubject] (main) Found [1] Pods, checking them...
2024-10-26 16:40:33,601 INFO  [org.sol.tes.con.TestSubject] (main) Checking Pod [https://alice.solidcommunity.net:8443/]
2024-10-26 16:40:33,614 DEBUG [org.sol.tes.htt.Client] (main) request:
  > HEAD https://alice.solidcommunity.net:8443/
  > Authorization: DPoP ***T7XUbQ
  > DPoP: ***5cPUtg
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:33,894 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 200
  < accept-patch: text/n3, application/sparql-update, application/sparql-update-single-match
  < accept-post: */*
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 2
  < content-type: text/turtle; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:34 GMT
  < etag: W/"2-nOO9QiTIwXgNtWtBJezz8kv3SLc"
  < keep-alive: timeout=5
  < link: <.acl>; rel="acl", <.meta>; rel="describedBy", <http://www.w3.org/ns/ldp#Container>; rel="type", <http://www.w3.org/ns/ldp#BasicContainer>; rel="type", <http://www.w3.org/ns/pim/space#Storage>; rel="type"
  < ms-author-via: SPARQL
  < set-cookie: nssidp.sid=s%3AG4iG0JcRPsrm0iExWW1LVaHYFXI-HkZX.4nnZ2o6ttAJAHZl%2FJSlZwL9dNwU4Kf3PXx3dER1ff9A; Domain=.solidcommunity.net; Path=/; Expires=Sun, 27 Oct 2024 16:40:34 GMT; HttpOnly; Secure
  < updates-via: wss://alice.solidcommunity.net:8443
  < vary: Accept, Authorization, Origin
  < wac-allow: user="read write append control",public="read"
  < x-powered-by: solid-server/5.7.11

2024-10-26 16:40:33,942 INFO  [org.sol.tes.con.TestSubject] (main) Pod found: [https://alice.solidcommunity.net:8443/]
2024-10-26 16:40:33,942 INFO  [org.sol.tes.con.TestSubject] (main) Test subject test container: https://alice.solidcommunity.net:8443/
2024-10-26 16:40:33,945 DEBUG [org.sol.tes.htt.Client] (main) request:
  > HEAD https://alice.solidcommunity.net:8443/
  > Authorization: DPoP ***T7XUbQ
  > DPoP: ***aD7Xrg
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:34,092 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 200
  < accept-patch: text/n3, application/sparql-update, application/sparql-update-single-match
  < accept-post: */*
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 2
  < content-type: text/turtle; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:34 GMT
  < etag: W/"2-nOO9QiTIwXgNtWtBJezz8kv3SLc"
  < keep-alive: timeout=5
  < link: <.acl>; rel="acl", <.meta>; rel="describedBy", <http://www.w3.org/ns/ldp#Container>; rel="type", <http://www.w3.org/ns/ldp#BasicContainer>; rel="type", <http://www.w3.org/ns/pim/space#Storage>; rel="type"
  < ms-author-via: SPARQL
  < set-cookie: nssidp.sid=s%3Ahy-0xV3YDDswsdVbLKgD_ddZ3QBjJraC.yL3yRO4s8j8baz0QhzjYTIZSB4SwWW7oW6%2FYux0pj3I; Domain=.solidcommunity.net; Path=/; Expires=Sun, 27 Oct 2024 16:40:34 GMT; HttpOnly; Secure
  < updates-via: wss://alice.solidcommunity.net:8443
  < vary: Accept, Authorization, Origin
  < wac-allow: user="read write append control",public="read"
  < x-powered-by: solid-server/5.7.11

2024-10-26 16:40:34,105 DEBUG [org.sol.tes.htt.Client] (main) request:
  > HEAD https://alice.solidcommunity.net:8443/.acl
  > Authorization: DPoP ***T7XUbQ
  > DPoP: ***iY7xJA
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:34,289 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 200
  < accept-patch: text/n3, application/sparql-update, application/sparql-update-single-match
  < accept-post: */*
  < accept-put: */*
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 2
  < content-type: text/turtle; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:35 GMT
  < etag: W/"2-nOO9QiTIwXgNtWtBJezz8kv3SLc"
  < keep-alive: timeout=5
  < link: <.acl.acl>; rel="acl", <.acl.meta>; rel="describedBy", <http://www.w3.org/ns/ldp#Resource>; rel="type"
  < ms-author-via: SPARQL
  < set-cookie: nssidp.sid=s%3AeKZkawXzBEeeK-5kFavaYRCWWaDMJvVh.SE0MiU%2F6QIh3TqkpY0e1cJY1nmqNXScJG29g6p810%2BI; Domain=.solidcommunity.net; Path=/; Expires=Sun, 27 Oct 2024 16:40:35 GMT; HttpOnly; Secure
  < updates-via: wss://alice.solidcommunity.net:8443
  < vary: Accept, Authorization, Origin
  < wac-allow: user="read write append control",public=""
  < x-powered-by: solid-server/5.7.11

2024-10-26 16:40:34,291 INFO  [org.sol.tes.con.TestSubject] (main) The Pod is using [WAC] for access control
2024-10-26 16:40:34,695 DEBUG [org.sol.tes.htt.Client] (main) request:
  > PUT https://alice.solidcommunity.net:8443/W9ld9r/
  > Authorization: DPoP ***T7XUbQ
  > Content-Type: text/turtle
  > DPoP: ***ZWiKPA
  > Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type"
  > User-Agent: Solid-Conformance-Test-Suite

2024-10-26 16:40:34,776 DEBUG [org.sol.tes.htt.Client] (main) response:
  < HTTP_1_1 201
  < access-control-allow-credentials: true
  < access-control-expose-headers: Authorization, User, Location, Link, Vary, Last-Modified, ETag, Accept-Patch, Accept-Post, Accept-Put, Updates-Via, Allow, WAC-Allow, Content-Length, WWW-Authenticate, MS-Author-Via, X-Powered-By
  < allow: OPTIONS, HEAD, GET, PATCH, POST, PUT, DELETE
  < connection: keep-alive
  < content-length: 7
  < content-type: text/plain; charset=utf-8
  < date: Sat, 26 Oct 2024 16:40:35 GMT
  < etag: W/"7-rM9AyJuqT6iOan/xHh+AW+7K/T8"
  < event-id: f6YYiD
  < keep-alive: timeout=5
  < ms-author-via: SPARQL
  < set-cookie: nssidp.sid=s%3AbHcO3oJxAfTWghBCP_0b-72KgFEZAi_l.dWkNuwsJWICkmo7waIN%2B5ld1pvnux3DGZvwYlu8F%2BL8; Domain=.solidcommunity.net; Path=/; Expires=Sun, 27 Oct 2024 16:40:35 GMT; HttpOnly; Secure
  < vary: Accept, Authorization, Origin
  < x-powered-by: solid-server/5.7.11
Created
2024-10-26 16:40:34,939 ERROR [org.sol.tes.Application] (main) Application failed: org.solid.testharness.utils.TestHarnessInitializationException: Failed to prepare server Caused by: org.solid.testharness.utils.TestHarnessException: Error response=404 trying to get content for https://alice.solidcommunity.net:8443/W9ld9r/
        at org.solid.testharness.config.TestSubject.prepareServer(TestSubject.java:162)
        at org.solid.testharness.config.TestSubject_ClientProxy.prepareServer(Unknown Source)
        at org.solid.testharness.ConformanceTestHarness.setupTestHarness(ConformanceTestHarness.java:202)
        at org.solid.testharness.ConformanceTestHarness.runTestSuites(ConformanceTestHarness.java:152)
        at org.solid.testharness.ConformanceTestHarness_ClientProxy.runTestSuites(Unknown Source)
        at org.solid.testharness.Application.run(Application.java:95)
        at org.solid.testharness.Application_ClientProxy.run(Unknown Source)
        at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:132)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
        at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
        at org.solid.testharness.Application.main(Application.java:79)
Caused by: org.solid.testharness.utils.TestHarnessException: Error response=404 trying to get content for https://alice.solidcommunity.net:8443/W9ld9r/
        at org.solid.testharness.http.SolidClientProvider.getContentAsTurtle(SolidClientProvider.java:162)
        at org.solid.testharness.utils.SolidResourceProvider.getContentAsTurtle(SolidResourceProvider.java:82)
        at org.solid.testharness.config.TestSubject.prepareServer(TestSubject.java:157)
        ... 10 more

Oct 26, 2024 4:40:34 PM io.quarkus.bootstrap.runner.Timing printStopTime
INFO: testharness stopped in 0.007s
Exit code: 1

@CxRes
Copy link
Collaborator Author

CxRes commented Oct 26, 2024

Can you please try the conformance test at the 33997ae commit. Given this is a container 404, the only change in the code that even could cause this failure is the commit after that.

Also, is the the only test that is failing, or are there others? Can you direct me to the repo where the test is set up?

@bourgeoa bourgeoa merged commit 44dc0bc into nodeSolidServer:main Nov 4, 2024
2 checks passed
@melvincarvalho
Copy link
Contributor

They don't need to enable PERP. If the argument is about having it on by default, I think a reasonable step, which I already suggested, would be to merge it with PREP disabled by default.

I think this may have been merged prematurely. This part also still needs attention. Perhaps a revert would be best.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants