238 lines
6.6 KiB
Go
238 lines
6.6 KiB
Go
package ec
|
||
|
||
import (
|
||
"bytes"
|
||
"fmt"
|
||
"io"
|
||
"io/ioutil"
|
||
"testing"
|
||
|
||
"gitlink.org.cn/cloudream/common/pkgs/ipfs"
|
||
//"gitlink.org.cn/cloudream/common/pkgs/ipfs"
|
||
//"gitlink.org.cn/cloudream/storage/agent/internal/config"
|
||
//stgglb "gitlink.org.cn/cloudream/storage/common/globals"
|
||
stgglb "gitlink.org.cn/cloudream/storage/common/globals"
|
||
)
|
||
|
||
func test_Combile(t *testing.T) {
|
||
chunkSize := int64(6)
|
||
blkReader, _ := NewBlockReader()
|
||
defer blkReader.Close()
|
||
blkReader.SetJumpRead("QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", 46, 3)
|
||
blkReader.SetchunkSize(chunkSize)
|
||
dataBlocks := make([]io.ReadCloser, 3)
|
||
dataBlocks[0], _ = blkReader.JumpFetchBlock(0)
|
||
dataBlocks[1], _ = blkReader.JumpFetchBlock(1)
|
||
dataBlocks[2], _ = blkReader.JumpFetchBlock(2)
|
||
enc, _ := NewRs(3, 5, chunkSize)
|
||
fptr, _ := enc.Combine(dataBlocks, 46)
|
||
print_ioreaders(t, []io.ReadCloser{fptr}, chunkSize)
|
||
}
|
||
|
||
func test_Encode(t *testing.T) {
|
||
enc, _ := NewRs(3, 5, 10)
|
||
rc := make([]io.ReadCloser, 3)
|
||
rc[0] = ioutil.NopCloser(bytes.NewBufferString("11111111"))
|
||
rc[1] = ioutil.NopCloser(bytes.NewBufferString("22222222"))
|
||
rc[2] = ioutil.NopCloser(bytes.NewBufferString("33333333"))
|
||
/*rc[0].Close()
|
||
rc[1].Close()
|
||
rc[2].Close()*/
|
||
print("#$$$$$$$$$$$")
|
||
out, _ := enc.ReconstructData(rc, []int{0, 1, 2})
|
||
//out, _ := enc.Encode(rc)
|
||
buf := make([]byte, 100)
|
||
out[0].Read(buf)
|
||
fmt.Println(buf)
|
||
out[1].Read(buf)
|
||
fmt.Println(buf)
|
||
t.Logf(string(buf))
|
||
t.Log(buf)
|
||
}
|
||
|
||
/*
|
||
------------------------------------------------
|
||
hash:QmX49sGugmtVPfNo13q84YL1NwGmr5yzWDDmJZ7PniQ9b6
|
||
内容:1111122222233333333334444444445663454543534534
|
||
|
||
hash:QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW
|
||
(5,3),chunkSize:6
|
||
data1:QmS2t7xFgTMTX2DGYsbDdmHnGvaG6sc7D9k1R2WZyuDx56
|
||
data2:QmUSZvuABjfGKF1c4VxvVBdH31SroDm2QyLGBrVFomRM8P
|
||
data3:QmcD3RpUh5rwMhf9yBywBeT6ibT1P5DSJC67aoD77jhTBn
|
||
内容:qqqqqqqqwwwwwwwwwwwwwweeeeeeeeeeeeerrrrrrrrrrr
|
||
-----------------------------------------------------
|
||
*/
|
||
func test_Fetch(t *testing.T) {
|
||
|
||
blkReader, _ := NewBlockReader()
|
||
/*****************************FetchBlock*************************/
|
||
/*r, _ := blkReader.FetchBLock("QmX49sGugmtVPfNo13q84YL1NwGmr5yzWDDmJZ7PniQ9b6")
|
||
data, _ := ioutil.ReadAll(r)
|
||
t.Logf(string(data))*/
|
||
|
||
/**********************FetchBlocks************************************
|
||
hashs := []string{"QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", "QmX49sGugmtVPfNo13q84YL1NwGmr5yzWDDmJZ7PniQ9b6"}
|
||
rs, _ := blkReader.FetchBLocks(hashs)
|
||
data1, _ := ioutil.ReadAll(rs[0])
|
||
data2, _ := ioutil.ReadAll(rs[1])
|
||
t.Logf(string(data1))
|
||
t.Logf(string(data2))
|
||
/*************************JumpFetchBlock*********************************/
|
||
blkReader.SetJumpRead("QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", 46, 3)
|
||
blkReader.SetchunkSize(6)
|
||
r, _ := blkReader.JumpFetchBlock(1)
|
||
data, _ := ioutil.ReadAll(r)
|
||
t.Logf(string(data))
|
||
}
|
||
func test_Fetch_and_Encode(t *testing.T) {
|
||
chunkSize := int64(6)
|
||
blkReader, _ := NewBlockReader()
|
||
defer blkReader.Close()
|
||
blkReader.SetJumpRead("QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", 46, 3)
|
||
blkReader.SetchunkSize(int64(chunkSize))
|
||
dataBlocks := make([]io.ReadCloser, 3)
|
||
for i := range dataBlocks {
|
||
dataBlocks[i], _ = blkReader.JumpFetchBlock(i)
|
||
}
|
||
enc, _ := NewRs(3, 5, chunkSize)
|
||
parityBlocks, _ := enc.Encode(dataBlocks)
|
||
|
||
parityData := make([]string, 2)
|
||
finished := false
|
||
for {
|
||
if finished {
|
||
break
|
||
}
|
||
buf := make([]byte, chunkSize)
|
||
for i, pipe := range parityBlocks {
|
||
_, err := pipe.Read(buf)
|
||
if err != nil {
|
||
finished = true
|
||
break
|
||
}
|
||
parityData[i] = parityData[i] + string(buf)
|
||
}
|
||
}
|
||
t.Logf(parityData[0])
|
||
t.Logf(parityData[1])
|
||
|
||
}
|
||
|
||
func test_Fetch_and_Encode_and_Degraded(t *testing.T) {
|
||
chunkSize := int64(6)
|
||
blkReader, _ := NewBlockReader()
|
||
defer blkReader.Close()
|
||
blkReader.SetJumpRead("QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", 46, 3)
|
||
blkReader.SetchunkSize(int64(chunkSize))
|
||
dataBlocks := make([]io.ReadCloser, 3)
|
||
for i := range dataBlocks {
|
||
dataBlocks[i], _ = blkReader.JumpFetchBlock(i)
|
||
}
|
||
enc, _ := NewRs(3, 5, chunkSize)
|
||
parityBlocks, _ := enc.Encode(dataBlocks)
|
||
go func() {
|
||
ioutil.ReadAll(parityBlocks[0])
|
||
}()
|
||
degradedBlocks := make([]io.ReadCloser, 3)
|
||
degradedBlocks[0], _ = blkReader.JumpFetchBlock(1)
|
||
degradedBlocks[1], _ = blkReader.JumpFetchBlock(2)
|
||
degradedBlocks[2] = parityBlocks[1]
|
||
newDataBlocks, _ := enc.ReconstructData(degradedBlocks, []int{1, 2, 4})
|
||
newData := make([]string, 3)
|
||
finished := false
|
||
for {
|
||
if finished {
|
||
break
|
||
}
|
||
buf := make([]byte, chunkSize)
|
||
for i, pipe := range newDataBlocks {
|
||
_, err := pipe.Read(buf)
|
||
if err != nil {
|
||
finished = true
|
||
break
|
||
}
|
||
newData[i] = newData[i] + string(buf)
|
||
}
|
||
}
|
||
t.Logf(newData[0])
|
||
t.Logf(newData[1])
|
||
t.Logf(newData[2])
|
||
|
||
}
|
||
|
||
func test_pin_data_blocks(t *testing.T) {
|
||
chunkSize := int64(6)
|
||
blkReader, _ := NewBlockReader()
|
||
defer blkReader.Close()
|
||
blkReader.SetJumpRead("QmcN1EJm2w9XT62Q9YqA5Ym7YDzjmnqJYc565bzRs5VosW", 46, 3)
|
||
blkReader.SetchunkSize(int64(chunkSize))
|
||
dataBlocks := make([]io.ReadCloser, 3)
|
||
ipfsclient, _ := stgglb.IPFSPool.Acquire()
|
||
for i := range dataBlocks {
|
||
dataBlocks[i], _ = blkReader.JumpFetchBlock(i)
|
||
hash, _ := ipfsclient.CreateFile(dataBlocks[i])
|
||
t.Logf(hash)
|
||
}
|
||
|
||
}
|
||
|
||
func print_ioreaders(t *testing.T, readers []io.ReadCloser, chunkSize int64) {
|
||
newData := make([]string, len(readers))
|
||
finished := false
|
||
for {
|
||
if finished {
|
||
break
|
||
}
|
||
buf := make([]byte, chunkSize)
|
||
for i, pipe := range readers {
|
||
_, err := pipe.Read(buf)
|
||
if err != nil {
|
||
finished = true
|
||
break
|
||
}
|
||
newData[i] = newData[i] + string(buf)
|
||
}
|
||
}
|
||
for _, data := range newData {
|
||
t.Logf(data)
|
||
}
|
||
}
|
||
|
||
func test_reconstructData(t *testing.T) {
|
||
blkReader, _ := NewBlockReader()
|
||
defer blkReader.Close()
|
||
hashs := []string{"QmS2t7xFgTMTX2DGYsbDdmHnGvaG6sc7D9k1R2WZyuDx56", "QmUSZvuABjfGKF1c4VxvVBdH31SroDm2QyLGBrVFomRM8P", "QmcD3RpUh5rwMhf9yBywBeT6ibT1P5DSJC67aoD77jhTBn"}
|
||
dataBlocks, _ := blkReader.FetchBLocks(hashs)
|
||
chunkSize := int64(6)
|
||
enc, _ := NewRs(3, 5, chunkSize)
|
||
print("@@@@@@@@@")
|
||
newDataBlocks, _ := enc.ReconstructSome(dataBlocks, []int{0, 1, 2}, []int{3, 4})
|
||
print("!!!!!!!!!")
|
||
print_ioreaders(t, newDataBlocks, chunkSize)
|
||
}
|
||
func Test_main(t *testing.T) {
|
||
//test_Encode(t)
|
||
//stgglb.InitLocal(&config.Cfg().Local)
|
||
stgglb.InitIPFSPool(&ipfs.Config{Port: 5001})
|
||
//test_Fetch(t)
|
||
//test_Fetch_and_Encode(t)
|
||
//test_Fetch_and_Encode_and_Degraded(t)
|
||
//test_pin_data_blocks(t)
|
||
//test_reconstructData(t)
|
||
test_Combile(t)
|
||
}
|
||
|
||
/*
|
||
func Test_Fetch_Encode_ReconstructData(t *testing.T) {
|
||
inFileName := "test.txt"
|
||
enc, _ := NewRs(3, 5, 10)
|
||
file, err := os.Open(inFileName)
|
||
if err != nil {
|
||
t.Error(err)
|
||
}
|
||
var data io.ReadCloser
|
||
data = file
|
||
//enc.Encode(data)
|
||
}*/
|