code.gitea.io/gitea@v1.19.3/modules/packages/nuget/symbol_extractor_test.go (about)

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