* [Tests] Introduce client-server integration tests * Add an in-process loopback that connects a real client transport to a real server transport, draining both Fiber loops in one synchronous pass instead of polling. A stalled exchange fails where it happened rather than hanging. * Cover protocol version negotiation across both implementations, where the unit tests only ever drive one side against a canned counter-offer. * Cover the server-to-client round-trips end to end: elicitation, sampling, roots, plus progress and logging notifications. * Add the `integration` test suite and a `make integration-tests` target. * [Tests] Run the integration suite in CI The unit job pins `--testsuite=unit`, so the new suite would never have run on GitHub. It goes in that job rather than its own: the loopback leans on Fibers, and the matrix is what covers them down to the PHP 8.1 floor. * [Tests] Run integration tests against a real server process Replaces the in-process loopback with the setup from examples/client: the client spawns a fixture server over the real StdioTransport, so the tests exercise the shipped transports and no longer nest both sides' Fibers. Moves the suite into its own CI job, matrixed over PHP 8.1-8.5.
55 lines
1.7 KiB
Makefile
55 lines
1.7 KiB
Makefile
.PHONY: deps-stable deps-low cs phpstan tests unit-tests integration-tests inspector-tests coverage ci ci-stable ci-lowest conformance-tests conformance-server conformance-client docs
|
|
|
|
deps-stable:
|
|
composer update --prefer-stable
|
|
|
|
deps-low:
|
|
composer update --prefer-lowest
|
|
|
|
cs:
|
|
vendor/bin/php-cs-fixer fix --diff --verbose
|
|
|
|
phpstan:
|
|
vendor/bin/phpstan --memory-limit=-1
|
|
|
|
tests:
|
|
vendor/bin/phpunit
|
|
|
|
unit-tests:
|
|
vendor/bin/phpunit --testsuite=unit
|
|
|
|
integration-tests:
|
|
vendor/bin/phpunit --testsuite=integration
|
|
|
|
inspector-tests:
|
|
vendor/bin/phpunit --testsuite=inspector
|
|
|
|
conformance-tests: conformance-server conformance-client
|
|
|
|
conformance-server:
|
|
docker compose -f tests/Conformance/Fixtures/docker-compose.yml up -d
|
|
@echo "Waiting for server to start..."
|
|
@sleep 5
|
|
rm -rf tests/Conformance/results
|
|
cd tests/Conformance && npx @modelcontextprotocol/conformance server --url http://localhost:8000/ --output-dir results || true
|
|
php tests/Conformance/score.php server
|
|
docker compose -f tests/Conformance/Fixtures/docker-compose.yml down
|
|
|
|
conformance-client:
|
|
rm -rf tests/Conformance/results
|
|
cd tests/Conformance && npx @modelcontextprotocol/conformance client --command "php $(CURDIR)/tests/Conformance/client.php" --suite all --expected-failures conformance-baseline.yml --output-dir results || true
|
|
php tests/Conformance/score.php client
|
|
|
|
coverage:
|
|
XDEBUG_MODE=coverage vendor/bin/phpunit --testsuite=unit --coverage-html=coverage
|
|
|
|
ci: ci-stable
|
|
|
|
ci-stable: deps-stable cs phpstan tests
|
|
|
|
ci-lowest: deps-low cs phpstan tests
|
|
|
|
docs:
|
|
vendor/bin/phpdoc
|
|
@grep -q 'No errors have been found' .phpdoc/build/reports/errors.html || \
|
|
(echo "Documentation errors found. See build/docs/reports/errors.html" && exit 1)
|