{"id":29190784,"url":"https://github.com/owncloud/cs3api-validator","last_synced_at":"2025-07-02T00:11:14.956Z","repository":{"id":42451562,"uuid":"440811547","full_name":"owncloud/cs3api-validator","owner":"owncloud","description":"End-to-End Test Suite for the CS3 APIs","archived":false,"fork":false,"pushed_at":"2024-11-29T08:51:55.000Z","size":280,"stargazers_count":2,"open_issues_count":2,"forks_count":3,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-06-24T15:02:45.720Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://owncloud.dev/cs3api-validator/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/owncloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-22T09:58:02.000Z","updated_at":"2024-11-27T09:59:00.000Z","dependencies_parsed_at":"2024-01-09T10:55:09.944Z","dependency_job_id":"9ef363e9-6aca-43aa-a23a-0d05a14fdb04","html_url":"https://github.com/owncloud/cs3api-validator","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/owncloud/cs3api-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owncloud%2Fcs3api-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owncloud%2Fcs3api-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owncloud%2Fcs3api-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owncloud%2Fcs3api-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/owncloud","download_url":"https://codeload.github.com/owncloud/cs3api-validator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owncloud%2Fcs3api-validator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263052430,"owners_count":23406106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-02T00:11:13.803Z","updated_at":"2025-07-02T00:11:14.900Z","avatar_url":"https://github.com/owncloud.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cs3api-validator\n\n\u003cimg width=\"100px\" src=\"https://raw.githubusercontent.com/cs3org/logos/master/cs3org/cs3org.png\"/\u003e\n\n[![Build Status](https://drone.owncloud.com/api/badges/owncloud/cs3api-validator/status.svg)](https://drone.owncloud.com/owncloud/cs3api-validator)\n[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Rocket chat](https://img.shields.io/badge/Chat%20on%20Rocket.Chat-blue?logo=data:image/png;base64,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)](https://talk.owncloud.com/channel/ocis)\n\n## End-to-End Test Suite for the CS3 APIs\n\n**This tool will receive a lot of changes before version 1.0.0**\n\nThe cs3api-validator is a tool to test implementations of the [CS3Apis](https://github.com/cs3org/cs3apis). It works as standalone software which only needs the address of a running cs3api provider.\n\n## Purpose\n\n### BDD (Behavior driven development)\n\nThe cs3api-validator can be run locally in a development phase to develop against a well-defined set of basic API operations. It has no external dependencies and runs human-readable gherkin test scenarios. This helps to understand the behavior of the CS3APIs being an additional way of documenting the API in combination with the specification.\n\n### Litmus Testing\n\nThis tool makes it possible to confirm that an implementation of the CS3APIs is compliant to the spec and fulfills the basic operations. This helps the CS3 community to keep different implementations in sync and foster compatibility between them.\n\n## Contributions\n\nThis is a community driven Open Source Project. We welcome contributions from everyone and we're ready to support you if you have the enthusiasm to contribute.\n\nPlease use the [issue tracker](https://github.com/owncloud/cs3api-validator/issues) to report problems or propose changes.\n\n## Getting help\n\nWe have a [Public Chat](https://talk.owncloud.com/) where you can chat with other community members and developers.\n\nHere are some useful channels to try:\n\n- [#ocis](https://talk.owncloud.com/channel/ocis) - Next Generation ownCloud Architecture\n- [#general](https://talk.owncloud.com/channel/general) - General Topics around File Sync \u0026 Share\n\n## Developing\n\n### Quick start\n```shell\ngit clone git@github.com:owncloud/cs3api-validator.git\ncd cs3api-validator\ngo test -v # default network addr of cs3api provider is localhost:9142\n```\n\n### Add features\n\nAdd new test steps to the feature files in the `features` directory.\n\n```gherkin\nFeature: eat godogs\n  In order to be happy\n  As a hungry gopher\n  I need to be able to eat godogs\n\n  Scenario: Eat 5 out of 12\n    Given there are 12 godogs\n    When I eat 5\n    Then there should be 7 remaining\n```\nThen run ` go run github.com/cucumber/godog/cmd/godog@master` which will output something similar like this\n\n```\nFeature: eat godogs\n  In order to be happy\n  As a hungry gopher\n  I need to be able to eat godogs\n\n  Scenario: Eat 5 out of 12          # features/godogs.feature:6\n    Given there are 12 godogs\n    When I eat 5\n    Then there should be 7 remaining\n\n1 scenarios (1 undefined)\n3 steps (3 undefined)\n220.129µs\n\nYou can implement step definitions for undefined steps with these snippets:\n\nfunc iEat(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc thereAreGodogs(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc thereShouldBeRemaining(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc InitializeScenario(ctx *godog.ScenarioContext) {\n        ctx.Step(`^I eat (\\d+)$`, iEat)\n        ctx.Step(`^there are (\\d+) godogs$`, thereAreGodogs)\n        ctx.Step(`^there should be (\\d+) remaining$`, thereShouldBeRemaining)\n}\n```\n\nThen copy the new step definition stubs to a *_test.go file and implement the steps. In this project we use a FeatureContext struct to share values between the tests steps. In order to do this we need to use a pointer to the FeatureContext as a function receiver in the test step methods.\n\n```go\nfunc (f *FeatureContext) iEat(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc (f *FeatureContext) thereAreGodogs(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc (f *FeatureContext) thereShouldBeRemaining(arg1 int) error {\n        return godog.ErrPending\n}\n\nfunc InitializeScenario(ctx *godog.ScenarioContext) {\n        f := \u0026FeatureContext{}\n        ctx.Step(`^I eat (\\d+)$`, f.iEat)\n        ctx.Step(`^there are (\\d+) godogs$`, f.thereAreGodogs)\n        ctx.Step(`^there should be (\\d+) remaining$`, f.thereShouldBeRemaining)\n}\n```\n\n## Usage\n\n### Run with go test\n\nYou can run the tests with the built-in go test command. The command passes its flags to the godog test suite. The test suite needs one flag to be set: The network address of the running system under test. It defaults to `localhost:9142` and you can set it using the ``--endpoint``flag.\n\n\u003e **_NOTE:_** If you want to use the godog flags you need to prefix them with ``godog.flagname``.\n\n#### In a working go environment\n\nRun ``go test --endpoint=your-addr:port -v``\n\n#### Build a binary with the tests\n\nRun ``go test -c``. This will create a ``cs3api-validator.test`` binary.\n\nExecute the tests ``./cs3qpi-validator.test --endpoint=your-addr:port``\n\n### Use tags\n\nYou can use [tags](https://github.com/cucumber/godog#tags) to filter features which should be executed. `--godog.tags=\u003cexpression\u003e`\n\n## License\n\nApache-2.0\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowncloud%2Fcs3api-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowncloud%2Fcs3api-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowncloud%2Fcs3api-validator/lists"}