![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Test your Python Kubernetes app/operator end-to-end with kind and pytest.
pytest-kind
is a plugin for pytest which provides the kind_cluster
fixture.
The fixture will install kind 0.17.0, create a Kubernetes 1.25 cluster, and provide convenience functionality such as port forwarding.
Install pytest-kind
via pip or via poetry, e.g.:
poetry add --dev pytest-kind
Write your pytest functions and use the provided kind_cluster
fixture, e.g.:
def test_kubernetes_version(kind_cluster):
assert kind_cluster.api.version == ('1', '25')
To load your custom Docker image and apply deployment manifests:
import requests
from pykube import Pod
def test_myapp(kind_cluster):
kind_cluster.load_docker_image("myapp")
kind_cluster.kubectl("apply", "-f", "deployment.yaml")
kind_cluster.kubectl("rollout", "status", "deployment/myapp")
# using Pykube to query pods
for pod in Pod.objects(kind_cluster.api).filter(selector="app=myapp"):
assert "Sucessfully started" in pod.logs()
with kind_cluster.port_forward("service/myapp", 80) as port:
r = requests.get(f"http://localhost:{port}/hello/world")
r.raise_for_status()
assert r.text == "Hello world!"
See the examples
directory for sample projects and also check out kube-web-view which uses pytest-kind for its e2e tests.
The kind_cluster
fixture is an instance of the KindCluster class with the following methods:
load_docker_image(docker_image)
: load the specified Docker image into the kind clusterkubectl(*args)
: run the kubectl
binary against the cluster with the specified arguments. Returns the process output as string.port_forward(service_or_pod_name, remote_port, *args)
: run "kubectl port-forward" for the given service/pod and return the (random) local port. To be used as context manager ("with" statement). Pass the namespace as additional args to kubectl via "-n", "mynamespace".KindCluster has the following attributes:
name
: the kind cluster namekubeconfig_path
: the path to the Kubeconfig file to access the clusterkind_path
: path to the kind
binarykubectl_path
: path to the kubectl
binaryapi
: pykube HTTPClient instance to access the cluster from PythonYou can also use KindCluster directly without pytest:
from pytest_kind import KindCluster
cluster = KindCluster("myclustername")
cluster.create()
cluster.kubectl("apply", "-f", "..")
# ...
cluster.delete()
The kind cluster name can be set via the --cluster-name
CLI option.
The kind cluster is deleted after each pytest session, you can keep the cluster by passing --keep-cluster
to pytest.
Note that you can use the PYTEST_ADDOPTS
environment variable to pass these options to pytest. This also works if you call pytest from a Makefile:
# for test debugging: don't delete the kind cluster
PYTEST_ADDOPTS=--keep-cluster make test
kind_cluster
fixture is session-scoped, i.e. the same cluster will be used across all test modules/functions.kind
and kubectl
binaries will be downloaded once to the local directory ./.pytest-kind/{cluster-name}/
. You can use them to interact with the cluster (e.g. when --keep-cluster
is used).FAQs
Kubernetes test support with KIND for pytest
We found that pytest-kind demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.