You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

symbol_extractor_test.go 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package nuget
  4. import (
  5. "archive/zip"
  6. "bytes"
  7. "encoding/base64"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. const pdbContent = `QlNKQgEAAQAAAAAADAAAAFBEQiB2MS4wAAAAAAAABgB8AAAAWAAAACNQZGIAAAAA1AAAAAgBAAAj
  12. fgAA3AEAAAQAAAAjU3RyaW5ncwAAAADgAQAABAAAACNVUwDkAQAAMAAAACNHVUlEAAAAFAIAACgB
  13. AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`
  14. func TestExtractPortablePdb(t *testing.T) {
  15. createArchive := func(name string, content []byte) []byte {
  16. var buf bytes.Buffer
  17. archive := zip.NewWriter(&buf)
  18. w, _ := archive.Create(name)
  19. w.Write(content)
  20. archive.Close()
  21. return buf.Bytes()
  22. }
  23. t.Run("MissingPdbFiles", func(t *testing.T) {
  24. var buf bytes.Buffer
  25. zip.NewWriter(&buf).Close()
  26. pdbs, err := ExtractPortablePdb(bytes.NewReader(buf.Bytes()), int64(buf.Len()))
  27. assert.ErrorIs(t, err, ErrMissingPdbFiles)
  28. assert.Empty(t, pdbs)
  29. })
  30. t.Run("InvalidFiles", func(t *testing.T) {
  31. data := createArchive("sub/test.bin", []byte{})
  32. pdbs, err := ExtractPortablePdb(bytes.NewReader(data), int64(len(data)))
  33. assert.ErrorIs(t, err, ErrInvalidFiles)
  34. assert.Empty(t, pdbs)
  35. })
  36. t.Run("Valid", func(t *testing.T) {
  37. b, _ := base64.StdEncoding.DecodeString(pdbContent)
  38. data := createArchive("test.pdb", b)
  39. pdbs, err := ExtractPortablePdb(bytes.NewReader(data), int64(len(data)))
  40. assert.NoError(t, err)
  41. assert.Len(t, pdbs, 1)
  42. assert.Equal(t, "test.pdb", pdbs[0].Name)
  43. assert.Equal(t, "d910bb6948bd4c6cb40155bcf52c3c94", pdbs[0].ID)
  44. pdbs.Close()
  45. })
  46. }
  47. func TestParseDebugHeaderID(t *testing.T) {
  48. t.Run("InvalidPdbMagicNumber", func(t *testing.T) {
  49. id, err := ParseDebugHeaderID(bytes.NewReader([]byte{0, 0, 0, 0}))
  50. assert.ErrorIs(t, err, ErrInvalidPdbMagicNumber)
  51. assert.Empty(t, id)
  52. })
  53. t.Run("MissingPdbStream", func(t *testing.T) {
  54. b, _ := base64.StdEncoding.DecodeString(`QlNKQgEAAQAAAAAADAAAAFBEQiB2MS4wAAAAAAAAAQB8AAAAWAAAACNVUwA=`)
  55. id, err := ParseDebugHeaderID(bytes.NewReader(b))
  56. assert.ErrorIs(t, err, ErrMissingPdbStream)
  57. assert.Empty(t, id)
  58. })
  59. t.Run("Valid", func(t *testing.T) {
  60. b, _ := base64.StdEncoding.DecodeString(pdbContent)
  61. id, err := ParseDebugHeaderID(bytes.NewReader(b))
  62. assert.NoError(t, err)
  63. assert.Equal(t, "d910bb6948bd4c6cb40155bcf52c3c94", id)
  64. })
  65. }