Skip to content

Commit

Permalink
Merge pull request #11 from fanap-infra/fix-previous-frame-chunk
Browse files Browse the repository at this point in the history
Fix previous frame chunk
  • Loading branch information
saeid-a authored Aug 1, 2021
2 parents e7898d1 + 1b2ced7 commit 4790fac
Show file tree
Hide file tree
Showing 9 changed files with 456 additions and 216 deletions.
174 changes: 3 additions & 171 deletions IO_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"math/rand"
"os"
"strconv"
"sync"
"testing"

"github.com/fanap-infra/archiverMedia/pkg/virtualMedia"
Expand Down Expand Up @@ -144,6 +143,9 @@ func TestIO_MultipleVirtualMediaFileConsecutively(t *testing.T) {

for _, v := range pckts {
frame, err := vf2.ReadFrame()
if err == virtualMedia.EndOfFile {
break
}
assert.Equal(t, nil, err)
if err != nil {
break
Expand All @@ -160,173 +162,3 @@ func TestIO_MultipleVirtualMediaFileConsecutively(t *testing.T) {
_ = utils.DeleteFile(homePath + "/" + fsPath)
_ = utils.DeleteFile(homePath + "/" + headerPath)
}

func TestIO_MultipleVirtualMediaFileConcurrency(t *testing.T) {
homePath, err := os.UserHomeDir()
assert.Equal(t, nil, err)
_ = utils.DeleteFile(homePath + "/" + fsPath)
_ = utils.DeleteFile(homePath + "/" + headerPath)
eventListener := EventsListener{t: t}
provider := NewProvider()
arch, err := provider.CreateFileSystem(homePath, fileSizeTest, blockSizeTest, &eventListener,
log.GetScope("test"))
assert.Equal(t, nil, err)
assert.Equal(t, true, utils.FileExists(homePath+"/"+fsPath))
assert.Equal(t, true, utils.FileExists(homePath+"/"+headerPath))

MaxID := 1000
MaxByteArraySize := int(blockSizeTest * 0.5)
VFSize := int(3.5 * blockSizeTest)

virtualMediaFiles := make([]*virtualMedia.VirtualMedia, 0)
numberOfVMs := 5
packets := make([][]*media.Packet, numberOfVMs)
vmIDs := make([]uint32, 0)
for i := 0; i < numberOfVMs; i++ {
vmID := uint32(rand.Intn(MaxID))
if utils.ItemExists(vmIDs, vmID) {
i = i - 1
continue
}
vmIDs = append(vmIDs, vmID)
vm, err := arch.NewVirtualMediaFile(vmID, "test"+strconv.Itoa(i))
if assert.Equal(t, nil, err) {
virtualMediaFiles = append(virtualMediaFiles, vm)
}
}
if len(virtualMediaFiles) != numberOfVMs {
return
}

var wg sync.WaitGroup
var mu sync.Mutex
for j, vm := range virtualMediaFiles {
wg.Add(1)
go func(j int, vm *virtualMedia.VirtualMedia) {
defer wg.Done()
size := 0
for {
token := make([]byte, uint32(rand.Intn(MaxByteArraySize)))
m, err := rand.Read(token)
assert.Equal(t, nil, err)

size = size + m
pkt := &media.Packet{Data: token, PacketType: media.PacketType_PacketVideo, IsKeyFrame: true}
mu.Lock()
packets[j] = append(packets[j], pkt)
mu.Unlock()
err = vm.WriteFrame(pkt)
assert.Equal(t, nil, err)

if size > VFSize {
break
}
}
err = vm.Close()
assert.Equal(t, nil, err)
}(j, vm)
}

wg.Wait()

for i, pckts := range packets {
vf2, err := arch.OpenVirtualMediaFile(vmIDs[i])
wg.Add(1)
assert.Equal(t, nil, err)
go func(pckts []*media.Packet, vf2 *virtualMedia.VirtualMedia) {
defer wg.Done()
for _, v := range pckts {
frame, err := vf2.ReadFrame()
assert.Equal(t, nil, err)
if err != nil {
break
}
assert.Equal(t, v.Data, frame.Data)
assert.Equal(t, v.Index, frame.Index)
}
err = vf2.Close()
}(pckts, vf2)

assert.Equal(t, nil, err)
}
wg.Wait()
err = arch.Close()
assert.Equal(t, nil, err)
_ = utils.DeleteFile(homePath + "/" + fsPath)
_ = utils.DeleteFile(homePath + "/" + headerPath)
}

func TestIO_ChangeFrameTime(t *testing.T) {
homePath, err := os.UserHomeDir()
assert.Equal(t, nil, err)
_ = utils.DeleteFile(homePath + "/" + fsPath)
_ = utils.DeleteFile(homePath + "/" + headerPath)
eventListener := EventsListener{t: t}
provider := NewProvider()

blockSizeTestTemp := 128
arch, err := provider.CreateFileSystem(homePath, int64(blockSizeTestTemp*128), uint32(blockSizeTestTemp), &eventListener,
log.GetScope("test"))
assert.Equal(t, nil, err)
assert.Equal(t, true, utils.FileExists(homePath+"/"+fsPath))
assert.Equal(t, true, utils.FileExists(homePath+"/"+headerPath))
var packets []*media.Packet

MaxID := 1000

MaxByteArraySize := int(float32(blockSizeTestTemp) * 0.1)
VFSize := int(3.5 * float32(blockSizeTestTemp))
vfID := uint32(rand.Intn(MaxID))
vm, err := arch.NewVirtualMediaFile(vfID, "test")
assert.Equal(t, nil, err)
size := 0
packetTime := 0
for {
token := make([]byte, uint32(rand.Intn(MaxByteArraySize)))
m, err := rand.Read(token)
assert.Equal(t, nil, err)
pkt := &media.Packet{
Data: token, PacketType: media.PacketType_PacketVideo, IsKeyFrame: true,
Time: int64(packetTime),
}
packetTime = packetTime + 30
packets = append(packets, pkt)
size = size + m
err = vm.WriteFrame(pkt)
assert.Equal(t, nil, err)

if size > VFSize {
break
}
}

err = vm.Close()
assert.Equal(t, nil, err)

vm2, err := arch.OpenVirtualMediaFile(vfID)
assert.Equal(t, nil, err)
numberOfTests := 5
counter := 0
for {
mTime := int64(rand.Intn(packetTime))
resultTime, err := vm2.GotoTime(mTime)
assert.Equal(t, nil, err)
assert.GreaterOrEqual(t, mTime+int64(virtualMedia.FrameChunkMinimumFrameCount*30), resultTime)
assert.GreaterOrEqual(t, resultTime, mTime-int64(virtualMedia.FrameChunkMinimumFrameCount*30))

pkt, err := vm2.ReadFrame()
assert.Equal(t, nil, err)
assert.GreaterOrEqual(t, mTime+virtualMedia.FrameChunkMinimumFrameCount*30, pkt.Time)
assert.GreaterOrEqual(t, pkt.Time, mTime-virtualMedia.FrameChunkMinimumFrameCount*30)
counter++
if counter == numberOfTests {
break
}
}
err = vm2.Close()
assert.Equal(t, nil, err)
err = arch.Close()
assert.Equal(t, nil, err)
_ = utils.DeleteFile(homePath + "/" + fsPath)
_ = utils.DeleteFile(homePath + "/" + headerPath)
}
Loading

0 comments on commit 4790fac

Please sign in to comment.