Skip to main content
Build Status Python Package Index Dockerhub Automated Build Status First Timers

This repository is a test and reference implementation for the Schul-Cloud-Resources API. The purpose is to

  • have a reference to verify the API specification is actually working

  • find uncertainties in the API specification

  • provide tests to speed up an implementation of the API on other servers such as schulcloud-content

  • have people contribute tests as a means of communication between applications: one test, X server-implementations

  • have an easy-to-setup server for crawler implementations and tests

This repository contains

  • a server to test scrapers against

  • tests to test the server

The package works under Python 2 and 3.

You can view the live docker instance at http://scrst.quelltext.eu/

Installation

Using pip, you can install all dependencies like this:

pip install --user schul_cloud_resources_server_tests

When you are done, you can import the package.

import schul_cloud_resources_server_tests

Installation for Development

If you want to work on the module, you need to install it differently. If you set it up for development, you can add new tests and features.

First, you need to have git installed. Then, clone the repository:

git clone https://github.com/schul-cloud/schul_cloud_resources_server_tests.git
cd schul_cloud_resources_server_tests

If you have pip installed, you can now install the packages:

pip install --user -r requirements.txt pip-tools==1.6.5

Now, as long as you are in the schul_cloud_resources_server_tests folder, you can run the commands as mentioned below. Additionally, you can use git to create pull-requests with your edited code.

Usage

This section describes how to use the server and the tests.

Server

You can find the API definition. The server serves according to the API. It verifies the input and output for correctness.

To start the server, run

python -m schul_cloud_resources_server_tests.app

The server should appear at http://localhost:8080/v1.

Tests

You always test against the running server. Tests may delete everyting you can reach. If you test the running server, make sure to authenticate in a way that does not destroy the data you want to keep.

python -m schul_cloud_resources_server_tests.tests --url=http://localhost:8080/v1/

http://localhost:8080/v1/ is the default url.

Steps for Implementation

If you want to implement your server you can follow the TDD steps to implement one test after the other.

python -m schul_cloud_resources_server_tests.tests -m step1
python -m schul_cloud_resources_server_tests.tests -m step2
python -m schul_cloud_resources_server_tests.tests -m step3
...
  • step1 runs the first test

  • step2 runs the first and the second test

  • step3 runs the first, second and third test

  • …

You can run a single test with

python -m schul_cloud_resources_server_tests.tests -m step3only

Test Authentication

The test server supports api key authentication and basic authentication. If you test authentication over the internet. Use https to protect the secrets. Thus, an example test call to your api could look like this:

python -m schul_cloud_resources_server_tests.tests  \
       --url=https://url.to/your/server               \
       --noauth=false --basic=username:password

If you have an api key, you can test that the server works.

python -m schul_cloud_resources_server_tests.tests   \
       --url=http://url.to/your/server                \
       --noauth=false --apikey=apikey

By default the test server accepts authentication with several credentials

  • no authentication

  • basic:

    • user valid1@schul-cloud.org password 123abc

    • user valid2@schul-cloud.org password supersecure

  • api key: abcdefghijklmn for the user valid1@schul-cloud.org. The client does not send the user name to the server.

To test these, you can add the --basic and --apikey parameters several times to the tests. The --noauth=true parameter is default. If the api only accepts authenticated requests, set --noauth=false.

python -m schul_cloud_resources_server_tests.tests    \
       --basic=valid1@schul-cloud.org:123abc           \
       --basic=valid2@schul-cloud.org:supersecure      \
       --apikey=valid1@schul-cloud.org:abcdefghijklmn  \
       --noauth=true

All tests are run with the different authentication options. If we have several ways to authenticate, the tests test if the user sees the other users’ data.

It is assumed, that adding invalid to the password, user name and api key will make it invalid. Tests use the invalid credentials to test the server behavior in rejected cases.

Example Travis Configuration

If you want to implement a crawler or server, you can use Travis-CI to test it. An example travis configuration can be found in the test-example branch. You can view the output The configuration is generic. It will run under any other language you configure.

Usage in Crawler

The url-crawler uses the test server to test synchronization.

Use the server in pytest

You can use the sever in Python tests. There are fixtures available that start and stop the server.

from schul_cloud_resources_server_tests.tests.fixtures import *

def test_pytest(resources_server):
    """pytest using the server"""

The following attributes are available:

  • resources_server.url The url of the server.

  • resources_server.api A schul_cloud_resources_api_v1.ResourcesApi object connected to the server.

  • resources_server.get_resources() A function to return a list of resources on the server.

For more information, see the module schul_cloud_resources_server_tests.tests.fixtures. You can add support for more test frameworks.

Docker

You can build the this image with the following docker command:

docker build -t schulcloud/schul_cloud_resources_server_tests .

Or you can pull the docker container and run it.

docker run schulcloud/schul_cloud_resources_server_tests

This starts the server at the port 8080 as in the examples above.

Docker-Compose

There is a docker-compose.yml file, so you can use the docker-compose command. The server will be available at http://localhost:80/v1 It uses a memory limit of 60MB.


You can edit this document on Github and check it with this editor.

Metadata

Release files for schul-cloud-resources-server-tests 1.0.387

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for schul-cloud-resources-server-tests 1.0.387
File Size Uploaded Provenance
schul_cloud_resources_server_tests-1.0.387.tar.gz 22.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for schul-cloud-resources-server-tests 1.0.387
File Interpreter ABI Platform
schul_cloud_resources_server_tests-1.0.387-py3-none-any.whl Python 3 none any Details

Total release size: 47.9 kB

Release files / schul_cloud_resources_server_tests-1.0.387.tar.gz

Download URL schul_cloud_resources_server_tests-1.0.387.tar.gz
Size 22.0 kB
Tags Source
SHA-256 checksum
How to use checksums
94940d9fc319423a626c0c98b438e0295434d6d78da93cc7206f66773b13f6d0
BLAKE2b-256 checksum
How to use checksums
19672ff68d87369e11ea1f1e10de8c224ffa7c68ee36ca22db1f058a71aec903
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / schul_cloud_resources_server_tests-1.0.387-py3-none-any.whl

Download URL schul_cloud_resources_server_tests-1.0.387-py3-none-any.whl
Size 25.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7735beb993628410d2395c372fd99459d8d68bd51a0998f4faa26b3f312aba8c
BLAKE2b-256 checksum
How to use checksums
58d83a62408a2c0abc821e83185ea03685913c4251c071a5969bcfd83199254e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for schul-cloud-resources-server-tests 1.0.387

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.387 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page