Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

84 rader
1.6 KiB

  1. // +build gofuzz
  2. package server
  3. import (
  4. "bytes"
  5. "github.com/dutchcoders/transfer.sh/server/utils"
  6. "io"
  7. "math/rand"
  8. "reflect"
  9. )
  10. const applicationOctetStream = "application/octet-stream"
  11. // FuzzLocalStorage tests the Local Storage.
  12. func FuzzLocalStorage(fuzz []byte) int {
  13. var fuzzLength = uint64(len(fuzz))
  14. if fuzzLength == 0 {
  15. return -1
  16. }
  17. storage, err := NewLocalStorage("/tmp", nil)
  18. if err != nil {
  19. panic("unable to create local storage")
  20. }
  21. token := utils.Encode(10000000 + int64(rand.Intn(1000000000)))
  22. filename := utils.Encode(10000000+int64(rand.Intn(1000000000))) + ".bin"
  23. input := bytes.NewReader(fuzz)
  24. err = storage.Put(token, filename, input, applicationOctetStream, fuzzLength)
  25. if err != nil {
  26. panic("unable to save file")
  27. }
  28. contentLength, err := storage.Head(token, filename)
  29. if err != nil {
  30. panic("not visible through head")
  31. }
  32. if contentLength != fuzzLength {
  33. panic("incorrect content length")
  34. }
  35. output, contentLength, err := storage.Get(token, filename)
  36. if err != nil {
  37. panic("not visible through get")
  38. }
  39. if contentLength != fuzzLength {
  40. panic("incorrect content length")
  41. }
  42. var length uint64
  43. b := make([]byte, len(fuzz))
  44. for {
  45. n, err := output.Read(b)
  46. length += uint64(n)
  47. if err == io.EOF {
  48. break
  49. }
  50. }
  51. if !reflect.DeepEqual(b, fuzz) {
  52. panic("incorrect content body")
  53. }
  54. if length != fuzzLength {
  55. panic("incorrect content length")
  56. }
  57. err = storage.Delete(token, filename)
  58. if err != nil {
  59. panic("unable to delete file")
  60. }
  61. _, err = storage.Head(token, filename)
  62. if !storage.IsNotExist(err) {
  63. panic("file not deleted")
  64. }
  65. return 1
  66. }