blob: ef92117b6e61a81e26cc2becec831a992d3ab3a4 [file]
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package buffer
import (
"container/list"
"testing"
"github.com/apache/skywalking-rover/pkg/profiling/task/network/analyze/events"
)
func TestOffsetPosition(t *testing.T) {
type position struct {
eventIndex int
bufferIndex int
}
var tests = []struct {
events []int
current position
offset int
result *position
}{
{
events: []int{10, 10, 10},
current: position{0, 0},
offset: 10,
result: &position{1, 0},
},
{
events: []int{10, 10, 10},
current: position{1, 0},
offset: -10,
result: &position{0, 0},
},
{
events: []int{10, 10, 10},
current: position{2, 5},
offset: -10,
result: &position{1, 5},
},
{
events: []int{10, 10, 10},
current: position{2, 5},
offset: -20,
result: &position{0, 5},
},
{
events: []int{10, 10, 10},
current: position{2, 5},
offset: 10,
result: nil,
},
}
for _, test := range tests {
eventList := list.New()
buffer := Buffer{dataEvents: eventList}
var curElement *list.Element
for i, e := range test.events {
element := eventList.PushBack(&events.SocketDataUploadEvent{
DataID0: uint64(i),
DataLen: uint16(e),
})
if i == test.current.eventIndex {
curElement = element
}
}
buffer.PrepareForReading()
buffer.current = &Position{element: curElement, bufIndex: test.current.bufferIndex}
offsetPosition := buffer.OffsetPosition(test.offset)
if offsetPosition == nil && test.result == nil {
continue
}
if int(offsetPosition.element.Value.(*events.SocketDataUploadEvent).DataID()) != test.result.eventIndex ||
offsetPosition.bufIndex != test.result.bufferIndex {
t.Fatalf("excepted: %d,%d, actual: %d,%d", test.result.eventIndex, test.result.bufferIndex,
offsetPosition.element.Value.(*events.SocketDataUploadEvent).DataID(), offsetPosition.bufIndex)
}
}
}