Skip to content

Commit

Permalink
handle nil chunk_info
Browse files Browse the repository at this point in the history
  • Loading branch information
popmonkey committed Aug 1, 2024
1 parent 1a608c7 commit 2e0e3fc
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 26 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ go.work.sum
examples/*/.*cache
examples/example.creds
examples/example.key
.irfetch_cache

# builds
build
56 changes: 30 additions & 26 deletions irdata.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,43 +239,47 @@ func (i *Irdata) Get(uri string) ([]byte, error) {
func (i *Irdata) resolveChunks(raw map[string]interface{}) error {
for k, v := range raw {
if k == "chunk_info" {
log.Debug("Chunked data found")
log.WithFields(log.Fields{
"chunk_info": v,
}).Debug("Chunked data found")

var results []interface{}

chunkInfo := v.(map[string]interface{})
if v != nil {
chunkInfo := v.(map[string]interface{})

for chunkNumber, chunkFileName := range chunkInfo["chunk_file_names"].([]interface{}) {
chunkUrl := fmt.Sprintf("%s%s", chunkInfo["base_download_url"], chunkFileName)
for chunkNumber, chunkFileName := range chunkInfo["chunk_file_names"].([]interface{}) {
chunkUrl := fmt.Sprintf("%s%s", chunkInfo["base_download_url"], chunkFileName)

log.WithFields(log.Fields{
"chunkNumber": chunkNumber,
"chunkUrl": chunkUrl,
}).Debug("Fetching chunk")
log.WithFields(log.Fields{
"chunkNumber": chunkNumber,
"chunkUrl": chunkUrl,
}).Debug("Fetching chunk")

chunkResp, err := i.retryingGet(chunkUrl)
if err != nil {
return err
}
chunkResp, err := i.retryingGet(chunkUrl)
if err != nil {
return err
}

chunkData, err := io.ReadAll(chunkResp.Body)
if err != nil {
return err
}
chunkData, err := io.ReadAll(chunkResp.Body)
if err != nil {
return err
}

var r []interface{}
var r []interface{}

err = json.Unmarshal(chunkData, &r)
if err != nil {
return err
}
err = json.Unmarshal(chunkData, &r)
if err != nil {
return err
}

log.WithFields(log.Fields{
"len(chunkData)": len(chunkData),
"len(r)": len(r),
}).Debug("Got chunk bytes")
log.WithFields(log.Fields{
"len(chunkData)": len(chunkData),
"len(r)": len(r),
}).Debug("Got chunk bytes")

results = append(results, r...)
results = append(results, r...)
}
}

// insert the results in the special ChunkDataKey key
Expand Down
14 changes: 14 additions & 0 deletions irdata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,20 @@ func getJsonArray(t *testing.T, data []byte) []interface{} {
return jsonData
}

// test resolveChunks with empty chunk_info
func TestResolveChunksEmpty(t *testing.T) {
raw := map[string]interface{}{}

raw["chunk_info"] = nil

assert.NoError(t, i.resolveChunks(raw))

v, ok := raw[ChunkDataKey]

assert.True(t, ok)
assert.Nil(t, v)
}

// event_types returns json directly
func TestGetBasic(t *testing.T) {
if auth() {
Expand Down

0 comments on commit 2e0e3fc

Please sign in to comment.