| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- <?php
- namespace Tests\Unit;
- use Tests\TestCase;
- use GuzzleHttp\Client;
- use Uraus\App\Request;
- use Uraus\App\Response;
- use UCore\Model\RequestLog;
- use Uraus\App\Common\RESPONSE_CODE;
- use Illuminate\Support\Facades\Log;
- class ProtobufControllerTest extends TestCase
- {
- private Client $client;
- private string $baseUrl = ''; // 修改为实际运行的服务器地址
- public function setUp(): void
- { parent::setUp();
- $this->baseUrl=env('UNITTEST_URL','http://localhost:8000');
- $this->client = new Client([
- 'base_uri' => $this->baseUrl,
- 'timeout' => 5.0,
- 'http_errors' => false,
- 'verify' => false // 禁用 SSL 验证
- ]);
- Log::info('测试开始,设置客户端配置', [
- 'base_uri' => $this->baseUrl
- ]);
- }
- /**
- * 测试 Hello 模块的 AreYouOk 请求
- */
- public function testHelloAreYouOk()
- {
- Log::info('准备 Hello/AreYouOk 测试数据');
- // 1. 准备 Protobuf 请求数据
- $areYouOk = new Request\RequestHello\ResponseHelloAreYouOk();
- $areYouOk->setMsg("你好".uniqid());
- $areYouOk->setTimes(time());
- $requestData = $areYouOk->serializeToString();
- Log::info('序列化请求数据完成', [
- 'data_length' => strlen($requestData)
- ]);
- // 2. 发送真实的 HTTP 请求
- Log::info('发送 HTTP 请求');
- $response = $this->client->post('/api/protobuf', [
- 'body' => $requestData,
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf',
- 'Accept' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到 HTTP 响应', [
- 'status_code' => $response->getStatusCode(),
- 'headers' => $response->getHeaders()
- ]);
- // 3. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 4. 解析响应数据
- $responseContent = $response->getBody()->getContents();
- Log::info('获取响应内容', [
- 'content_length' => strlen($responseContent)
- ]);
- $protoResponse = new Response();
- $protoResponse->mergeFromString($responseContent);
- // 5. 验证基本响应字段
- $this->assertEquals(RESPONSE_CODE::OK, $protoResponse->getCode());
- $runUnid = $protoResponse->getRunUnid();
- $this->assertNotEmpty($runUnid);
- $this->assertGreaterThanOrEqual(0, $protoResponse->getRunMs());
- // 6. 验证请求日志记录
- $requestLog = RequestLog::where('request_unid', $runUnid)->first();
- $this->assertNotNull($requestLog);
- $this->assertEquals('api/protobuf', $requestLog->path);
- $this->assertEquals('POST', $requestLog->method);
- $this->assertNotEmpty($requestLog->headers);
- $this->assertNotEmpty($requestLog->ipaddress);
- $this->assertNotEmpty($requestLog->host);
- $this->assertEquals($protoResponse->serializeToJsonString(), $requestLog->response);
- $this->assertEquals($protoResponse->getRunMs(), $requestLog->run_ms);
- // 6. 验证业务响应数据
- $this->assertTrue($protoResponse->hasHello());
- $helloResponse = $protoResponse->getHello();
- $this->assertTrue($helloResponse->hasAreYouOk());
- $areYouOkResponse = $helloResponse->getAreYouOk();
- $this->assertStringStartsWith( $areYouOk->getMsg(),$areYouOkResponse->getMsg());
- $this->assertEquals($request->getHello()->getAreYouOk()->getTimes(), $areYouOkResponse->getTimes());
- Log::info('测试完成');
- }
- /**
- * 测试 Hello 模块的 AreYouOk 请求, Validation错误
- */
- public function testHelloAreYouOk1()
- {
- Log::info('准备 Hello/AreYouOk 测试数据');
- // 1. 准备 Protobuf 请求数据
- $areYouOk = new Request\RequestHello\RequestHelloAreYouOk();
- $areYouOk->setMsg("你好".uniqid());
- $areYouOk->setTimes(1);
- $hello = new Request\RequestHello();
- $hello->setAreYouOk($areYouOk);
- $request = new Request();
- $request->setHello($hello);
- $requestData = $request->serializeToString();
- Log::info('序列化请求数据完成', [
- 'data_length' => strlen($requestData)
- ]);
- // 2. 发送真实的 HTTP 请求
- Log::info('发送 HTTP 请求');
- $response = $this->client->post('/api/protobuf', [
- 'body' => $requestData,
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf',
- 'Accept' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到 HTTP 响应', [
- 'status_code' => $response->getStatusCode(),
- 'headers' => $response->getHeaders()
- ]);
- // 3. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 4. 解析响应数据
- $responseContent = $response->getBody()->getContents();
- Log::info('获取响应内容', [
- 'content_length' => strlen($responseContent)
- ]);
- $protoResponse = new Response();
- $protoResponse->mergeFromString($responseContent);
- Log::info('解析响应数据完成', [
- 'response_code' => $protoResponse->getCode(),
- 'run_ms' => $protoResponse->getRunMs(),
- 'json'=>$protoResponse->serializeToJsonString()
- ]);
- // 5. 验证基本响应字段
- $this->assertEquals(RESPONSE_CODE::VALIDATE_ERROR, $protoResponse->getCode());
- // 6. 验证错误日志记录
- $requestLog = RequestLog::where('request_unid', $protoResponse->getRunUnid())->first();
- $this->assertNotNull($requestLog);
- $this->assertNotEmpty($requestLog->error);
- Log::info('测试完成');
- }
- /**
- * 测试msg不存在数值
- * @return void
- * @throws \GuzzleHttp\Exception\GuzzleException
- */
- public function testHelloAreYouOk2()
- {
- Log::info('准备 Hello/AreYouOk 测试数据');
- // 1. 准备 Protobuf 请求数据
- $areYouOk = new Request\RequestHello\RequestHelloAreYouOk();
- $areYouOk->setTimes(100);
- $hello = new Request\RequestHello();
- $hello->setAreYouOk($areYouOk);
- $request = new Request();
- $request->setHello($hello);
- $requestData = $request->serializeToString();
- Log::info('序列化请求数据完成', [
- 'data_length' => strlen($requestData)
- ]);
- // 2. 发送真实的 HTTP 请求
- Log::info('发送 HTTP 请求');
- $response = $this->client->post('/api/protobuf', [
- 'body' => $requestData,
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf',
- 'Accept' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到 HTTP 响应', [
- 'status_code' => $response->getStatusCode(),
- 'headers' => $response->getHeaders()
- ]);
- // 3. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 4. 解析响应数据
- $responseContent = $response->getBody()->getContents();
- Log::info('获取响应内容', [
- 'content_length' => strlen($responseContent)
- ]);
- $protoResponse = new Response();
- $protoResponse->mergeFromString($responseContent);
- Log::info('解析响应数据完成', [
- 'response_code' => $protoResponse->getCode(),
- 'run_ms' => $protoResponse->getRunMs(),
- 'json'=>$protoResponse->serializeToJsonString()
- ]);
- // 5. 验证基本响应字段
- $this->assertEquals(RESPONSE_CODE::VALIDATE_ERROR, $protoResponse->getCode());
- // 6. 验证错误日志记录
- $requestLog = RequestLog::where('request_unid', $protoResponse->getRunUnid())->first();
- $this->assertNotNull($requestLog);
- $this->assertNotEmpty($requestLog->error);
- Log::info('测试完成');
- }
- /**
- * 测试无效的请求数据
- */
- public function testInvalidRequest()
- {
- Log::info('开始测试无效请求');
- // 1. 发送无效数据
- $response = $this->client->post('/api/protobuf', [
- 'body' => 'invalid data',
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到无效请求响应', [
- 'status_code' => $response->getStatusCode()
- ]);
- // 2. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 3. 解析响应数据
- $protoResponse = new Response();
- $protoResponse->mergeFromString($response->getBody()->getContents());
- // 4. 验证错误响应
- $this->assertEquals(RESPONSE_CODE::SERVER_ERROR, $protoResponse->getCode());
- // 5. 验证错误日志记录
- $requestLog = RequestLog::where('request_unid', $protoResponse->getRunUnid())->first();
- $this->assertNotNull($requestLog);
- $this->assertNotEmpty($requestLog->error);
- Log::info('无效请求测试完成');
- }
- /**
- * 测试空请求数据
- */
- public function testEmptyRequest()
- {
- Log::info('开始测试空请求');
- // 1. 发送空数据
- $response = $this->client->post('/api/protobuf', [
- 'body' => '',
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到空请求响应', [
- 'status_code' => $response->getStatusCode()
- ]);
- // 2. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 3. 解析响应数据
- $protoResponse = new Response();
- $protoResponse->mergeFromString($response->getBody()->getContents());
- // 4. 验证错误响应
- $this->assertEquals(RESPONSE_CODE::SERVER_ERROR, $protoResponse->getCode());
- // 5. 验证错误日志记录
- $requestLog = RequestLog::where('request_unid', $protoResponse->getRunUnid())->first();
- $this->assertNotNull($requestLog);
- $this->assertNotEmpty($requestLog->error);
- Log::info('空请求测试完成');
- }
- /**
- * 测试未知模块
- */
- public function testUnknownModule()
- {
- Log::info('开始测试未知模块请求');
- // 1. 准备一个空的请求对象
- $request = new Request();
- $requestData = $request->serializeToString();
- // 2. 发送请求
- $response = $this->client->post('/api/protobuf', [
- 'body' => $requestData,
- 'headers' => [
- 'Content-Type' => 'application/x-protobuf'
- ]
- ]);
- Log::info('收到未知模块响应', [
- 'status_code' => $response->getStatusCode()
- ]);
- // 3. 验证 HTTP 响应状态码
- $this->assertEquals(200, $response->getStatusCode());
- // 4. 解析响应数据
- $protoResponse = new Response();
- $protoResponse->mergeFromString($response->getBody()->getContents());
- // 5. 验证错误响应
- $this->assertEquals(RESPONSE_CODE::SERVER_ERROR, $protoResponse->getCode());
- // 6. 验证错误日志记录
- $requestLog = RequestLog::where('request_unid', $protoResponse->getRunUnid())->first();
- $this->assertNotNull($requestLog);
- $this->assertNotEmpty($requestLog->error);
- Log::info('未知模块测试完成');
- }
- }
|