diff --git a/tests/data/command104.txt b/tests/data/command104.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a217c69eba3416d16ec8f9b41da1e4b831cbce83
--- /dev/null
+++ b/tests/data/command104.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/a/path/103 --head
diff --git a/tests/data/command105.txt b/tests/data/command105.txt
new file mode 100644
index 0000000000000000000000000000000000000000..094bb54bb822da4dd33c53554f3a5076cd057f72
--- /dev/null
+++ b/tests/data/command105.txt
@@ -0,0 +1,2 @@
+ftp://userdude:passfellow@%HOSTIP:%FTPPORT/103 --use-ascii
+
diff --git a/tests/data/command106.txt b/tests/data/command106.txt
new file mode 100644
index 0000000000000000000000000000000000000000..00abeb251dad1cfec54c89f2f6cc8201169ef44a
--- /dev/null
+++ b/tests/data/command106.txt
@@ -0,0 +1,2 @@
+"ftp://%HOSTIP:%FTPPORT//path%20with%20%20spaces/and%20things2/106;type=A"
+
diff --git a/tests/data/command107.txt b/tests/data/command107.txt
new file mode 100644
index 0000000000000000000000000000000000000000..11c82ad965280923f2427cfccce02387200b85da
--- /dev/null
+++ b/tests/data/command107.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/107 -T data/reply106.txt
diff --git a/tests/data/command108.txt b/tests/data/command108.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e3306f267591db100aea84e5a171da8fffdbf48e
--- /dev/null
+++ b/tests/data/command108.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/108 -T data/reply106.txt -P -
diff --git a/tests/data/command109.txt b/tests/data/command109.txt
new file mode 100644
index 0000000000000000000000000000000000000000..118f2603bf137a24bdb04e24087ca5648aa1da43
--- /dev/null
+++ b/tests/data/command109.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/109 -T data/reply106.txt --append
diff --git a/tests/data/command110.txt b/tests/data/command110.txt
new file mode 100644
index 0000000000000000000000000000000000000000..90ea561a457d8161746e5532a956a26585dd17ce
--- /dev/null
+++ b/tests/data/command110.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/110 -C 20
diff --git a/tests/data/command111.txt b/tests/data/command111.txt
new file mode 100644
index 0000000000000000000000000000000000000000..af0e8c2a5341c60306e594b05c0386321590a11e
--- /dev/null
+++ b/tests/data/command111.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/110 -C 2000
diff --git a/tests/data/command112.txt b/tests/data/command112.txt
new file mode 100644
index 0000000000000000000000000000000000000000..53e5ca988c55deb822dd0f1a7d96ca9799f3aa62
--- /dev/null
+++ b/tests/data/command112.txt
@@ -0,0 +1 @@
+ftp://%HOSTIP:%FTPPORT/112 -T data/reply106.txt -C 40
diff --git a/tests/data/error111.txt b/tests/data/error111.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7facc89938bbc5635e3d36ffa56b4c85e9b07db8
--- /dev/null
+++ b/tests/data/error111.txt
@@ -0,0 +1 @@
+36
diff --git a/tests/data/name101.txt b/tests/data/name101.txt
index a15e892536ad9e7a526d832dc145bfdf44a23483..13ccd9bb074a15fc113bb2340bd806c7947db895 100644
--- a/tests/data/name101.txt
+++ b/tests/data/name101.txt
@@ -1,2 +1 @@
 FTP dir list, PORT with specified IP
-
diff --git a/tests/data/name104.txt b/tests/data/name104.txt
new file mode 100644
index 0000000000000000000000000000000000000000..898b1c5649016f5aaa4fdc2054a79cb9a57bf43f
--- /dev/null
+++ b/tests/data/name104.txt
@@ -0,0 +1 @@
+FTP --head to get file size only
diff --git a/tests/data/name105.txt b/tests/data/name105.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c8d5cc6ebdc25602866f9ad32b586feff6a1deeb
--- /dev/null
+++ b/tests/data/name105.txt
@@ -0,0 +1 @@
+FTP user+password in URL and ASCII transfer
diff --git a/tests/data/name106.txt b/tests/data/name106.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c7da9f30a7b50c3c0007e377de76037aa97e4b27
--- /dev/null
+++ b/tests/data/name106.txt
@@ -0,0 +1 @@
+FTP GET with type=A style ASCII URL using %20 codes
diff --git a/tests/data/name107.txt b/tests/data/name107.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7a04a0d7d838515b3a43c6588ff6638794fbbc9c
--- /dev/null
+++ b/tests/data/name107.txt
@@ -0,0 +1 @@
+FTP PASV upload file
diff --git a/tests/data/name108.txt b/tests/data/name108.txt
new file mode 100644
index 0000000000000000000000000000000000000000..48f75b5f7af19495d340cb1abf39d1f7341e1920
--- /dev/null
+++ b/tests/data/name108.txt
@@ -0,0 +1 @@
+FTP PORT upload with CWD
diff --git a/tests/data/name109.txt b/tests/data/name109.txt
new file mode 100644
index 0000000000000000000000000000000000000000..10fd5b955f99eefc0d9b26758061eb42c8664e71
--- /dev/null
+++ b/tests/data/name109.txt
@@ -0,0 +1 @@
+FTP PASV upload append
diff --git a/tests/data/name110.txt b/tests/data/name110.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7761f4b1c87a219a17a4f7989ac54e0b598a8ee5
--- /dev/null
+++ b/tests/data/name110.txt
@@ -0,0 +1 @@
+FTP download resume with set limit
diff --git a/tests/data/name111.txt b/tests/data/name111.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ef5452b2f0c5167026091b27c164c99941e3dd7
--- /dev/null
+++ b/tests/data/name111.txt
@@ -0,0 +1 @@
+FTP download resume beyond file size
diff --git a/tests/data/name112.txt b/tests/data/name112.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d310a848306363b45844ab5ff1a4247950fd5a5
--- /dev/null
+++ b/tests/data/name112.txt
@@ -0,0 +1 @@
+FTP PASV upload resume
diff --git a/tests/data/prot103.txt b/tests/data/prot103.txt
index 42e857e42b40a1b35d27b50da2af0057e35f1d84..243e8406ba2a516c2819bc61ecfa01825a2773ce 100644
--- a/tests/data/prot103.txt
+++ b/tests/data/prot103.txt
@@ -1,6 +1,6 @@
 USER anonymous
 PASS curl_by_daniel@haxx.se
-CWD a/path/
+CWD a/path
 PORT 127,0,0,1,246,33
 TYPE I
 RETR 103
diff --git a/tests/data/prot104.txt b/tests/data/prot104.txt
new file mode 100644
index 0000000000000000000000000000000000000000..86db1a250f43586d9b51b62b07e8a6db94ce8790
--- /dev/null
+++ b/tests/data/prot104.txt
@@ -0,0 +1,5 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+CWD a/path
+TYPE I
+SIZE 103
diff --git a/tests/data/prot105.txt b/tests/data/prot105.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cc7a2ebbe6b15f300f84b0183b1c634589d77286
--- /dev/null
+++ b/tests/data/prot105.txt
@@ -0,0 +1,5 @@
+USER userdude
+PASS passfellow
+PASV
+TYPE A
+RETR 103
diff --git a/tests/data/prot106.txt b/tests/data/prot106.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a357804b3e5c69ffc28f3f15029d9d4a6667044a
--- /dev/null
+++ b/tests/data/prot106.txt
@@ -0,0 +1,6 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+CWD /path with  spaces/and things2
+PASV
+TYPE A
+RETR 106
diff --git a/tests/data/prot107.txt b/tests/data/prot107.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cf989b18065c307409c791140bc8d0a9a97b1997
--- /dev/null
+++ b/tests/data/prot107.txt
@@ -0,0 +1,5 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PASV
+TYPE I
+STOR 107
diff --git a/tests/data/prot108.txt b/tests/data/prot108.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0b132e7268bc92f44e708f567ecc3622e0739d3c
--- /dev/null
+++ b/tests/data/prot108.txt
@@ -0,0 +1,6 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+CWD CWD/STOR/RETR
+PORT 127,0,0,1,5,109
+TYPE I
+STOR 108
diff --git a/tests/data/prot109.txt b/tests/data/prot109.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c8d909199602bd1c865786802cb54f31e8c46af3
--- /dev/null
+++ b/tests/data/prot109.txt
@@ -0,0 +1,5 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PASV
+TYPE I
+APPE 109
diff --git a/tests/data/prot110.txt b/tests/data/prot110.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a7d34dd95f8f1fbf01a470257039bdfccdea4f04
--- /dev/null
+++ b/tests/data/prot110.txt
@@ -0,0 +1,7 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PASV
+TYPE I
+SIZE 110
+REST 20
+RETR 110
diff --git a/tests/data/prot112.txt b/tests/data/prot112.txt
new file mode 100644
index 0000000000000000000000000000000000000000..407ff9786048d30aa327020de6b4daef728c67ee
--- /dev/null
+++ b/tests/data/prot112.txt
@@ -0,0 +1,5 @@
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PASV
+TYPE I
+APPE 112
diff --git a/tests/data/reply104.txt b/tests/data/reply104.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7f64e7e40b459d65e362e34bc0f0661c8a478cd4
--- /dev/null
+++ b/tests/data/reply104.txt
@@ -0,0 +1 @@
+Content-Length: 51
diff --git a/tests/data/reply105.txt b/tests/data/reply105.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cfa203ddcc2fc5644dec65050aadd6cdef85738
--- /dev/null
+++ b/tests/data/reply105.txt
@@ -0,0 +1,6 @@
+data
+    to
+      see
+that FTP
+works
+  so does it?
diff --git a/tests/data/reply106.txt b/tests/data/reply106.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cfa203ddcc2fc5644dec65050aadd6cdef85738
--- /dev/null
+++ b/tests/data/reply106.txt
@@ -0,0 +1,6 @@
+data
+    to
+      see
+that FTP
+works
+  so does it?
diff --git a/tests/data/reply110.txt b/tests/data/reply110.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9b1c181c7d2f5048381221823a4cee9c4a47e0ca
--- /dev/null
+++ b/tests/data/reply110.txt
@@ -0,0 +1,2 @@
+expected to be a file without the first part
+but we emulate that
diff --git a/tests/data/stdout107.txt b/tests/data/stdout107.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/data/stdout108.txt b/tests/data/stdout108.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/data/stdout109.txt b/tests/data/stdout109.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/data/stdout110.txt b/tests/data/stdout110.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ce14288d32c04938275e4ce1740b73a90eb78f35
--- /dev/null
+++ b/tests/data/stdout110.txt
@@ -0,0 +1,2 @@
+e without the first part
+but we emulate that
diff --git a/tests/data/stdout112.txt b/tests/data/stdout112.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/data/upload107.txt b/tests/data/upload107.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cfa203ddcc2fc5644dec65050aadd6cdef85738
--- /dev/null
+++ b/tests/data/upload107.txt
@@ -0,0 +1,6 @@
+data
+    to
+      see
+that FTP
+works
+  so does it?
diff --git a/tests/data/upload108.txt b/tests/data/upload108.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cfa203ddcc2fc5644dec65050aadd6cdef85738
--- /dev/null
+++ b/tests/data/upload108.txt
@@ -0,0 +1,6 @@
+data
+    to
+      see
+that FTP
+works
+  so does it?
diff --git a/tests/data/upload109.txt b/tests/data/upload109.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0cfa203ddcc2fc5644dec65050aadd6cdef85738
--- /dev/null
+++ b/tests/data/upload109.txt
@@ -0,0 +1,6 @@
+data
+    to
+      see
+that FTP
+works
+  so does it?
diff --git a/tests/data/upload112.txt b/tests/data/upload112.txt
new file mode 100644
index 0000000000000000000000000000000000000000..741e7b4409acd1610b0382df0f6a6e10bff0dedb
--- /dev/null
+++ b/tests/data/upload112.txt
@@ -0,0 +1 @@
+o does it?