assertInstanceOf(StreamInterface::class, $stream); $this->assertEquals(11, $stream->getSize()); $this->assertEquals(true, $stream->isSeekable()); $got = $stream->read(20); $this->assertEquals($data, $got); $got = $stream->read(20); $this->assertEquals('', $got); $stream->rewind(); $got = $stream->read(20); $this->assertEquals($data, $got); } public function testGuessContentType(): void { $this->assertEquals(null, Utils::guessContentType('')); $this->assertEquals('application/octet-stream', Utils::guessContentType('', 'application/octet-stream')); $this->assertEquals('image/jpeg', Utils::guessContentType('1.jpeg')); $this->assertEquals('image/jpeg', Utils::guessContentType('1.jpeg', 'application/octet-stream')); } public function testUrlEncode(): void { $this->assertEquals('123%2F123%2F%2B%20%3F%2F123', Utils::urlEncode('123/123/+ ?/123')); $this->assertEquals('123/123/%2B%20%3F/123', Utils::urlEncode('123/123/+ ?/123', true)); } public function testIsIpFormat(): void { $this->assertTrue(Utils::isIPFormat("10.101.160.147")); $this->assertTrue(Utils::isIPFormat("12.12.12.34")); $this->assertTrue(Utils::isIPFormat("12.12.12.12")); $this->assertTrue(Utils::isIPFormat("255.255.255.255")); $this->assertTrue(Utils::isIPFormat("0.1.1.1")); $this->assertFalse(Utils::isIPFormat("0.1.1.x")); $this->assertFalse(Utils::isIPFormat("0.1.1.256")); $this->assertFalse(Utils::isIPFormat("256.1.1.1")); $this->assertFalse(Utils::isIPFormat("0.1.1.0.1")); $this->assertTrue(Utils::isIPFormat("10.10.10.10:123")); } public function testToSimpleArray(): void { $this->assertEquals([], Utils::toSimpleArray([])); $this->assertEquals([1, 2, 3], Utils::toSimpleArray([1, 2, 3])); $this->assertEquals( ['1' => '1-1', '2' => '2-1', '3' => '3-1'], Utils::toSimpleArray(['1' => ['1-1', '1-2'], '2' => ['2-1', '2-2'], '3' => '3-1']) ); } public function testCalcContentMd5(): void { $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', Utils::calcContentMd5(Utils::streamFor(''))); $body = Utils::streamFor("hello world\n"); $this->assertEquals('b1kCrCNwJL3QwXbLkwY9xA==', Utils::calcContentMd5($body)); $this->assertEquals('b1kCrCNwJL3QwXbLkwY9xA==', Utils::calcContentMd5($body)); } public function testEscapeXml(): void { $bytes = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]; $encstr = '� '; $edata = Utils::escapeXml(pack("C*", ...$bytes)); $this->assertEquals($encstr, $edata); $bytes = [ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0xe4, 0xbd, 0xa0, 0xe5, 0xa5, 0xbd ]; $encstr = ' !你好'; $edata = Utils::escapeXml(pack("C*", ...$bytes)); $this->assertEquals($encstr, $edata); $data = '<>&"'; $encstr = '<>&"'; $edata = Utils::escapeXml($data); $this->assertEquals($encstr, $edata); } public function testParseHttpRange(): void { $values = Utils::parseHttpRange('bytes=22-33'); $this->assertCount(2, $values); $this->assertEquals(22, $values[0]); $this->assertEquals(33, $values[1]); $values = Utils::parseHttpRange('bytes=-33'); $this->assertCount(2, $values); $this->assertEquals(-1, $values[0]); $this->assertEquals(33, $values[1]); $values = Utils::parseHttpRange('bytes=22-'); $this->assertCount(2, $values); $this->assertEquals(22, $values[0]); $this->assertEquals(-1, $values[1]); $values = Utils::parseHttpRange('bytes=0-'); $this->assertCount(2, $values); $this->assertEquals(0, $values[0]); $this->assertEquals(-1, $values[1]); $values = Utils::parseHttpRange('bytes=-0'); $this->assertCount(2, $values); $this->assertEquals(-1, $values[0]); $this->assertEquals(0, $values[1]); $values = Utils::parseHttpRange('bytes=-0'); $this->assertCount(2, $values); $this->assertEquals(-1, $values[0]); $this->assertEquals(0, $values[1]); $this->assertFalse(Utils::parseHttpRange('')); $this->assertFalse(Utils::parseHttpRange('bytes=1-42,55-60')); $this->assertFalse(Utils::parseHttpRange('bytes=1')); $this->assertFalse(Utils::parseHttpRange('bytes=abc-123')); $this->assertFalse(Utils::parseHttpRange('bytes=123-abc')); } public function testParseContentRange(): void { $values = Utils::parseContentRange('bytes 22-33/42'); $this->assertCount(3, $values); $this->assertEquals(22, $values[0]); $this->assertEquals(33, $values[1]); $this->assertEquals(42, $values[2]); $values = Utils::parseContentRange('bytes 22-33/*'); $this->assertCount(3, $values); $this->assertEquals(22, $values[0]); $this->assertEquals(33, $values[1]); $this->assertEquals(-1, $values[2]); $this->assertFalse(Utils::parseContentRange('')); $this->assertFalse(Utils::parseContentRange('invalid')); $this->assertFalse(Utils::parseContentRange('bytes abc')); $this->assertFalse(Utils::parseContentRange('bytes */42')); $this->assertFalse(Utils::parseContentRange('bytes abc/42')); $this->assertFalse(Utils::parseContentRange('bytes abc-33/42')); $this->assertFalse(Utils::parseContentRange('bytes 11-abc/42')); $this->assertFalse(Utils::parseContentRange('bytes 11-33/abc')); } public function testDefaultUserAgent(): void { $userAgent = Utils::defaultUserAgent(); $this->assertStringContainsString('alibabacloud-php-sdk-v2/', $userAgent); $this->assertStringContainsString(Version::VERSION, $userAgent); } }