diff --git a/test/meson.build b/test/meson.build
index 7716aaf5..93faf467 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,7 +1,6 @@
 
 # Testing binaries that are not unit tests, but intended for manual use
 
-urltest = executable('urltest', 'url.cpp', dependencies: libmist_dep)
 logtest = executable('logtest', 'log.cpp', dependencies: libmist_dep)
 downloadertest = executable('downloadertest', 'downloader.cpp', dependencies: libmist_dep)
 urireadertest = executable('urireadertest', 'urireader.cpp', dependencies: libmist_dep)
@@ -12,6 +11,104 @@ websockettest = executable('websockettest', 'websocket.cpp', dependencies: libmi
 
 # Actual unit tests
 
+urltest = executable('urltest', 'url.cpp', dependencies: libmist_dep)
+test('url test google', urltest, 
+      env : ['Protocol=https', 'Host=google.com', 'Local=No', 'Port=443', 'Path=directory/', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['https://google.com/directory/subdirectory/..'])
+test('url test schmerkel', urltest, 
+      env : ['Protocol=http', 'Host=root', 'Local=No', 'Port=80', 'Path=home/mo','Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['http://root/home/schmerkel/../mo'])
+test('url test relpath', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=','Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/rel/lang/../..'])
+test('url test relpath missing dot', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/rel/./..'])
+test('url test relpath 1', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=','Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/1/..'])
+test('url test relpath 123', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=','Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/123/..'])
+test('url test relpath 2', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=','Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/rel/../..'])
+test('url test relpath langer pad', urltest, 
+      env : ['Protocol=https', 'Host=relpath.com', 'Local=No', 'Port=443', 'Path=langer/', 'Query=', 'Fragment=', 'Username=', 'Password='],
+      args : ['https://relpath.com/langer/pad/..'])
+test('url test authority 3000', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=3000', 'Path=path/to/some/file.cpp', 'Query=bool=true&int=3', 'Fragment=frag', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl:3000/path/to/err/../some/file.cpp?bool=true&int=3#frag'])
+test('url test authority path', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=path/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/path/weird/./..'])
+test('url test authority path wierd', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=path/weird/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/path/weird/a/..'])
+test('url test authority p&at#h/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=p&at#h/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/p%26at%23h/'])
+test('url test authority p at!h/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=p at!h/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/p%20at%21h/'])
+# KATRI TODO Cannot test pass as env ' %27 , need escape char for meson string ''
+test('url test authority  !"#$%&()/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path= !"#$%&()/','Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/%20%21%22%23%24%25%26%28%29/'])
+test('url test authority *+,-.//', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=*+,-.//', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/%2A%2B%2C%2D%2E%2F/'])
+test('url test authority 0123456789/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=0123456789/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/%30%31%32%33%34%35%36%37%38%39/'])
+test('url test authority _;<=>?@/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=:;<=>?@/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/%3A%3B%3C%3D%3E%3F%40/'])
+test('url test authority ABCDEFGHI/', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=ABCDEFGHI/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/%41%42%43%44%45%46%47%48%49/'])
+test('url test doe/iets', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=doe/iets', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/doe/iets'])
+test('url test sub1/sub2/', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=sub1/sub2/', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/sub1/sub2/'])
+test('url test sub1/sub2/ anders', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=sub1/sub2/www.wiki.com/anders', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/sub1/sub2/www.wiki.com/anders'])
+test('url test sub1/sub2/ relatief', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=sub1/sub2/www.wiki.com/relatief/', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/sub1/sub2/www.wiki.com/relatief/'])
+test('url test absoluut', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=absoluut/', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/absoluut/'])
+test('url test absoluut relatiefFile', urltest, 
+      env : ['Protocol=file', 'Host=google.com', 'Local=No', 'Port=0', 'Path=absoluut/relatiefFile', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['file://google.com/absoluut/relatiefFile'])
+test('url test path empty', urltest, 
+      env : ['Protocol=http', 'Host=www.wiki.com', 'Local=No', 'Port=80', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['http://www.wiki.com/'])
+test('url test path emoticons', urltest, 
+      env : ['Protocol=protocol', 'Host=authority.nl', 'Local=No', 'Port=0', 'Path=😋😄😡😵/', 'Query=', 'Fragment=', 'Username=uname', 'Password=pwd'], 
+      args : ['protocol://uname:pwd@authority.nl/😋😄😡😵/'])
+test('url test rtmp 1', urltest, 
+      env : ['Protocol=https', 'Host=2001:db8::1', 'Local=No', 'Port=159', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['https://[2001:db8::1]:159/'])
+test('url test rtpm 2', urltest, 
+      env : ['Protocol=rtmp', 'Host=2001:db8::1', 'Local=No', 'Port=1935', 'Path=','Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['rtmp://[2001:db8::1]/'])
+test('url test rtpms', urltest, 
+      env : ['Protocol=rtmps', 'Host=2001:db8::1', 'Local=No', 'Port=443', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['rtmps://[2001:db8::1]/'])
+test('url test rtpm 2', urltest, 
+      env : ['Protocol=dtsc', 'Host=2001:db8::1', 'Local=No', 'Port=4200', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['dtsc://[2001:db8::1]/'])
+test('url test rtsp', urltest, 
+      env : ['Protocol=rtsp', 'Host=2001:db8::1', 'Local=No', 'Port=554', 'Path=', 'Query=', 'Fragment=', 'Username=', 'Password='], 
+      args : ['rtsp://[2001:db8::1]/'])
+
+
+
 dtsc_sizing_test = executable('dtsc_sizing_test', 'dtsc_sizing.cpp', dependencies: libmist_dep)
 test('DTSC Sizing Test', dtsc_sizing_test)
 
diff --git a/test/url.cpp b/test/url.cpp
index cee3fe8e..3cb625d3 100644
--- a/test/url.cpp
+++ b/test/url.cpp
@@ -1,4 +1,5 @@
 #include "../lib/http_parser.cpp"
+#include <cassert>
 #include <iostream>
 
 int main(int argc, char **argv){
@@ -20,6 +21,22 @@ int main(int argc, char **argv){
     std::cout << "Username: " << u.user << std::endl;
     std::cout << "Password: " << u.pass << std::endl;
     std::cout << std::endl;
+
+    assert(u.protocol == std::getenv("Protocol"));
+    assert(u.host == std::getenv("Host"));
+    std::string ulocal;
+    Socket::isLocalhost(u.host) ? ulocal = "Yes" : ulocal = "No";
+    assert(ulocal == std::getenv("Local"));
+    uint16_t uport = 0;
+    std::stringstream ss(std::getenv("Port"));
+    ss >> uport;
+    assert(u.getPort() == uport);
+    assert(u.path == std::getenv("Path"));
+    assert(u.args == std::getenv("Query"));
+    assert(u.frag == std::getenv("Fragment"));
+    assert(u.user == std::getenv("Username"));
+    assert(u.pass == std::getenv("Password"));
+
   }
   return 0;
 }