<?php require_once(__DIR__ . "/../lib/UloggerAPITestCase.php"); if (!defined("ROOT_DIR")) { define("ROOT_DIR", __DIR__ . "/../.."); } require_once(ROOT_DIR . "/helpers/config.php"); require_once(ROOT_DIR . "/helpers/lang.php"); class ImportTest extends UloggerAPITestCase { public function testImportGPX10() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx10 = '<?xml version="1.0"?> <gpx version="1.0" creator="test software" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"> <time>2017-09-19T11:00:08Z</time> <trk> <name>' . $this->testTrackName . '</name> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"> <ele>' . $this->testAltitude . '</ele> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp) . '</time> </trkpt> <trkpt lat="' . $this->testLat . '" lon="' . -1 * $this->testLon . '"> <ele>' . $this->testAltitude . '</ele> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp + 1) . '</time> </trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx10) ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status"); $this->assertEquals(1, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(1, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(1, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(2, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => null ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => $this->testTimestamp, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => $this->testAltitude, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 2, "time" => $this->testTimestamp + 1, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon * -1, "altitude" => $this->testAltitude, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportGPX11() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx11 = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <gpx version="1.1" creator="test creator" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> <metadata> <name>' . $this->testTrackComment . '</name> <desc>Track for testing ulogger</desc> <author> <name>Bartek Fabiszewski</name> <link href="http://www.fabiszewski.net"><text>fabiszewski.net</text></link> </author> <time>2017-09-19T09:22:06Z</time> <keywords>Test, ulogger</keywords> <bounds minlat="44.64365345" maxlat="45.341" minlon="14.452354" maxlon="24.54234"/> </metadata> <trk> <src>Crafted by Bartek Fabiszewski</src> <link href="http://www.fabiszewski.net"><text>fabiszewski.net</text></link> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"> <ele>' . $this->testAltitude . '</ele> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp) . '</time> <fix>3d</fix> <hdop>300</hdop><vdop>300</vdop><pdop>300</pdop> </trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx11), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status"); $this->assertEquals(1, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(1, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(1, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(1, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => $this->testTrackComment ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => $this->testTimestamp, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => $this->testAltitude, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportExtensions() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd https://github.com/bfabiszewski/ulogger-android/1 https://github.com/bfabiszewski/ulogger-android/gpx_extensions1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xmlns:ulogger="https://github.com/bfabiszewski/ulogger-android/1" creator="μlogger" version="1.1"> <metadata> <name>' . $this->testTrackComment . '</name> <time>2017-06-24T22:50:45Z</time> </metadata> <trk> <name>' . $this->testTrackName . '</name> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"> <ele>' . $this->testAltitude . '</ele> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp) . '</time> <name>1</name> <desc><![CDATA[User: demo Track: client_test2 Time: 2017-06-25 00:50:45 (Europe/Warsaw) Speed: 0 km/h Altitude: 15 m Total time: 00:00:00 Average speed: 0 km/h Total distance: 0 km Point 1 of 18]]></desc> <extensions> <ulogger:speed>' . $this->testSpeed . '</ulogger:speed> <ulogger:bearing>' . $this->testBearing . '</ulogger:bearing> <ulogger:accuracy>' . $this->testAccuracy . '</ulogger:accuracy> <ulogger:provider>' . $this->testProvider . '</ulogger:provider> </extensions> </trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status"); $this->assertEquals(1, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(1, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(1, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(1, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => $this->testTrackComment ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => $this->testTimestamp, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => $this->testAltitude, "speed" => $this->testSpeed, "bearing" => $this->testBearing, "accuracy" => $this->testAccuracy, "provider" => $this->testProvider, "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportNoTime() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"></trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status"); $this->assertEquals(1, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(1, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(1, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(1, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => null ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => 1, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => null, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportMultipleSegments() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp) . '</time> </trkpt> </trkseg> <trkseg> <trkpt lat="' . ($this->testLat + 1) . '" lon="' . ($this->testLon + 1) . '"> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp + 1) . '</time> </trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status: $xml->message"); $this->assertEquals(1, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(1, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(1, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(2, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => null ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => $this->testTimestamp, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => null, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 2, "time" => $this->testTimestamp + 1, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat + 1, "longitude" => $this->testLon + 1, "altitude" => null, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportMultipleTracks() { $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp) . '</time> </trkpt> </trkseg> </trk> <trk> <trkseg> <trkpt lat="' . ($this->testLat + 1) . '" lon="' . ($this->testLon + 1) . '"> <time>' . gmdate("Y-m-d\TH:i:s\Z", $this->testTimestamp + 1) . '</time> </trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(0, (int) $xml->error, "Wrong error status: $xml->message"); $this->assertEquals(2, (int) $xml->trackid, "Wrong error message"); $this->assertEquals(2, (int) $xml->trackcnt, "Wrong error message"); $this->assertEquals(2, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(2, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $expected = [ "id" => 1, "user_id" => 1, "name" => $this->testTrackName, "comment" => null ]; $actual = $this->getConnection()->createQueryTable( "tracks", "SELECT * FROM tracks" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 2, "user_id" => 1, "name" => $this->testTrackName, "comment" => null ]; $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 1, "time" => $this->testTimestamp, "user_id" => 1, "track_id" => 1, "latitude" => $this->testLat, "longitude" => $this->testLon, "altitude" => null, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $actual = $this->getConnection()->createQueryTable( "positions", "SELECT id, " . $this->unix_timestamp('time') . " AS time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id FROM positions" ); $this->assertTableContains($expected, $actual, "Wrong actual table data"); $expected = [ "id" => 2, "time" => $this->testTimestamp + 1, "user_id" => 1, "track_id" => 2, "latitude" => $this->testLat + 1, "longitude" => $this->testLon + 1, "altitude" => null, "speed" => null, "bearing" => null, "accuracy" => null, "provider" => "gps", "comment" => null, "image_id" => null ]; $this->assertTableContains($expected, $actual, "Wrong actual table data"); } public function testImportNoLongitude() { $lang = (new uLang("en"))->getStrings(); $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lat="' . $this->testLat . '"></trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(1, (int) $xml->error, "Wrong error status"); $this->assertEquals($lang["iparsefailure"], (string) $xml->message, "Wrong error status"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); } public function testImportNoLatitude() { $lang = (new uLang("en"))->getStrings(); $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lon="' . $this->testLon . '"></trkpt> </trkseg> </trk> </gpx>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(1, (int) $xml->error, "Wrong error status"); $this->assertEquals($lang["iparsefailure"], (string) $xml->message, "Wrong error status"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); } public function testImportNoGPX() { $lang = (new uLang("en"))->getStrings(); $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <trk> <trkseg> <trkpt lat="' . $this->testLat . '" lon="' . $this->testLon . '"></trkpt> </trkseg> </trk>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(1, (int) $xml->error, "Wrong error status"); $this->assertEquals($lang["iparsefailure"], (string) $xml->message, "Wrong error status"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); } public function testImportCorrupt() { $lang = (new uLang("en"))->getStrings(); $this->assertTrue($this->authenticate(), "Authentication failed"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); $gpx = '<?xml version="1.0" encoding="UTF-8"?> <gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" creator="μlogger" version="1.1"> <trk> <trkseg> <trkpt lon="' . $this->testLon . '"></trkpt> </trkseg>'; $options = [ "http_errors" => false, "multipart" => [ [ "name" => "gpx", "contents" => $this->getStream($gpx), "filename" => $this->testTrackName ], [ "name" => "MAX_FILE_SIZE", "contents" => 300000 ] ], ]; $response = $this->http->post("/utils/import.php", $options); $this->assertEquals(200, $response->getStatusCode(), "Unexpected status code"); $xml = $this->getXMLfromResponse($response); $this->assertTrue($xml !== false, "XML object is false"); $this->assertEquals(1, (int) $xml->error, "Wrong error status"); $this->assertEquals(0, strpos((string) $xml->message, $lang["iparsefailure"]), "Wrong error status"); $this->assertEquals(0, $this->getConnection()->getRowCount("tracks"), "Wrong row count"); $this->assertEquals(0, $this->getConnection()->getRowCount("positions"), "Wrong row count"); } private function getXMLfromResponse($response) { $xml = false; libxml_use_internal_errors(true); try { $xml = new SimpleXMLElement((string) $response->getBody()); } catch (Exception $e) { /* ignore */ } return $xml; } private function getStream($string) { $stream = tmpfile(); fwrite($stream, $string); fseek($stream, 0); return $stream; } } ?>