#### Localhost is about program your own HTTP server and test it with an actual browser.
###### Take The necessary time to understand the project and to test it,take a look around the code to ask reasonable questions such as:
###### Take The necessary time to understand the project and to test it, take a look around the code and ask reasonable questions such as:
###### Explain the basics of an HTTP server.
###### Ask which function they used for I/O Multiplexing.
###### Ask to get an explanation of how select (or equivalent) is working.
###### Ask if they use only one select (or equivalent) and how they've managed the server accept and the client read/write.
###### Ask if they use only one select (or equivalent) and how they've managed the server with one select to accept and read the client requests.
###### There should be only one read or one write per client per select (or equivalent). Ask to show you the code that goes from the select (or equivalent) to the read and write of a client.
###### Search for all [read,recv,write,send] and check if the returned value is well checked. (checking only -1 or 0 is not good you should check both)
###### Check return value for O/I functions [read,recv,write,send] . is the audite checking for `-1` and `0` at the same time.
###### Writing or reading ANY file descriptor without going through the select (or equivalent) is strictly
###### Check the return value for I/O functions[read,recv,write,send] and check if the returned value is well checked. (checking only -1 or 0 is not good you should check both).
###### Writing or reading ANY file descriptor without going through the select (or equivalent) is strictly.
### Configuration
#### In the configuration file, check if you can do or check the following:
##### Look at the subject configuration file part to compare it to the project configuration file. is it the same?
#### Check the configuration file for the following:
##### Look at the subject configuration file to compare it to the project configuration file. Check if it's formatted the same.
##### Look for the HTTP response status codes list on internet.
##### Set up multiple servers with different port
##### Set up multiple servers with different hostnames (use something like: curl --resolve example.com:80:127.0.0.1 http://example.com/)
@ -27,17 +26,17 @@
### Basic checks
###### Using telnet, curl, and prepared files demonstrate that the following features work correctly:
##### Test the GET requests if it works well.
##### Test the POST requests if it works well.
##### Test the DELETE requests if it works well.
##### Test the UNKNOWN requests, it should not work, but the server is not supposed to crash.
##### Test if the GET requests works well.
##### Test if the POST requests works well.
##### Test if the DELETE requests works well.
##### Test an UNKNOWN request, it should not work, but the server is not supposed to crash.
##### For every test, there is a status code (RFC) that must be respected.
##### upload some files to the server and get them back.
### Check with a browser
##### Use the reference browser of the team, open the network part of it, and try to connect to the server with it.
##### Look at the request header and response header, It should be compatible with serving a fully static website.
##### Look at the request header and response header, It should be able to serve a fully static website.
##### Try a wrong URL on the server.
##### Try to list a directory.
##### Try a redirected URL.
@ -51,12 +50,11 @@
##### In the configuration file setup multiple ports and use different websites, use the browser to check that the configuration is working as expected, and show the right website.
##### In the configuration try to setup the same port multiple times. It should not work.
##### Launch multiple servers at the same time with different configurations but with common ports. Is it working? If it is working, ask why the server should work if one of the configurations isn't working?
##### Launch multiple servers at the same time with different configurations but with common ports. check if it's working and ask why the server should work if one of the configurations isn't working?.
### Siege & stress test
##### Use Siege to run some stress tests.
##### Availability should be above 99.5% for a simple get on an empty page with a `siege -b [IP]:[PORT]` on that page.
##### Availability should be above 95.99% for a simple get on an empty page with a `siege -b [IP]:[PORT]` on that page.
##### Check if there is no memory leak (monitor the process memory usage it should not go up indefinitely).
##### Check if there is no hanging connection.
##### You should be able to use siege indefinitely without restarting the server (look at siege -b).
@ -64,4 +62,4 @@
### Bonus Part
##### + There's more than one CGI system such as [Python, C++,Perle].
##### + Browse http://[IP]:[PORT]/mysql.php and check if the student create a php page that can connect to a database
##### + Browse http://[IP]:[PORT]/mysql.php and check if the student create a php page that can connect to a database.