Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Testing ultimate checklist #17

Open
50 tasks done
iker-gonzalez opened this issue Apr 17, 2023 · 0 comments
Open
50 tasks done

Testing ultimate checklist #17

iker-gonzalez opened this issue Apr 17, 2023 · 0 comments
Assignees

Comments

@iker-gonzalez
Copy link
Owner

iker-gonzalez commented Apr 17, 2023

Check the code and ask questions

  • Launch the installation of siege with homebrew. @iker-gonzalez
  • Ask explanations about the basics of an HTTP server. @iker-gonzalez
  • Ask what function the group used for I/O Multiplexing. @zcanales
  • Ask for an explanation of how does select() (or equivalent) work. @zcanales
  • Ask if they use only one select() (or equivalent) and how they've managed the server to accept and the client to read/write. @zcanales
  • The select() (or equivalent) should be in the main loop and should check file descriptors for read and write AT THE SAME TIME. If not, the grade is 0 and the evaluation process ends now. @zcanales
  • There should be only one read or one write per client per select() (or equivalent). Ask the group to show you the code from the select() (or equivalent) to the read and write of a client. @zcanales
  • Search for all read/recv/write/send on a socket and check that, if an error is returned, the client is removed. @zcanales
  • Search for all read/recv/write/send and check if the returned value is correctly checked (checking only -1 or 0 values is not enough, both should be checked). @zcanales
  • If errno is checked after read/recv/write/send, the grade is 0 and the evaluation process ends now. -> eliminate all references to errno. Currently are some of them.
  • Writing or reading ANY file descriptor without going through the select() (or equivalent) is strictly FORBIDDEN. @zcanales
  • The project must compile without any re-link issue. If not, use the 'Invalid compilation' flag. @iker-gonzalez
  • If any point is unclear or is not correct, use the flag for 'Incomplete work'.

Configuration:

  • In the configuration file, check whether you can do the following and test the result:
  • Search for the HTTP response status codes list on the internet. During this evaluation, if any status codes is wrong, don't give any related points. @iker-gonzalez
  • Setup multiple servers with different ports. @iker-gonzalez
  • Setup multiple servers with different hostnames (use something like: curl --resolve example.com:80:127.0.0.1 http://example.com/). @iker-gonzalez
  • Setup default error page (try to change the error 404). @iker-gonzalez
  • Limit the client body (use: curl -X POST -H "Content-Type: plain/text" --data "BODY IS HERE write something shorter or longer than body limit"). @iker-gonzalez
  • Setup routes in a server to different directories. @iker-gonzalez
  • Setup a default file to search for if you ask for a directory. @iker-gonzalez
  • Setup a list of methods accepted for a certain route (e.g., try to delete something with and without permission). @iker-gonzalez

Basic checks:

  • Using telnet, curl, prepared files, demonstrate that the following features work properly:
  • GET requests -> should work
  • POST requests -> should work
  • DELETE requests -> should work
  • UNKNOWN requests -> should not produce any crash
  • For every test the status code must be correct @iker-gonzalez
  • Upload some file to the server and get it back

Check CGI: @zcanales

  • The server is working fine using a CGI.
  • The CGI should be run in the correct directory for relative path file access.
  • With the help of the evaluation group you should check that everything is working properly. You have to test the CGI with the methods "GET", "POST" and "DELETE".
  • You need to test with files containing errors to see if the error handling works properly.
  • You need to test with files containing errors to see if the error handling works properly. You can use a script containing an infinite loop or an error; you are free to do whatever tests you want within the limits of acceptability that remain at your discretion. The group being evaluated should help you with this.
  • The server should never crash and an error should be visible in case of a problem.

Check with a browser

  • Use the reference browser of the team. Open the network part of it, and try to connect to the server using it. @iker-gonzalez
  • Look at the request header and response header. @iker-gonzalez
  • It should be compatible to serve a fully static website. @iker-gonzalez
  • Try a wrong URL on the server. @iker-gonzalez
  • Try to list a directory. -> when requesting a directory it should show a directory. Currently going to 404.
  • Try a redirected URL. @iker-gonzalez
  • Try anything you want to. @iker-gonzalez

Port issues

  • In the configuration file setup multiple ports and use different websites. Use the browser to ensure that the configuration works as expected and shows the right website. @iker-gonzalez
  • In the configuration, try to setup the same port multiple times. It should not work. @iker-gonzalez
  • Launch multiple servers at the same time with different configurations but with common ports. Does it work? If it does, ask why the server should work if one of the configurations isn't functional. Keep going. @iker-gonzalez

Siege & stress test

  • Use Siege to run some stress tests. @iker-gonzalez
  • Availability should be above 99.5% for a simple GET on an empty page with a siege -b on that page. @iker-gonzalez
  • Verify there is no memory leak (Monitor the process memory usage. It should not go up indefinitely). @iker-gonzalez
  • Check if there is no hanging connection. @iker-gonzalez
  • You should be able to use siege indefinitely without having to restart the server (take a look at siege -b). @iker-gonzalez
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants