mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	
		
			
	
	
		
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package compressions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"bytes"
							 | 
						||
| 
								 | 
							
									"errors"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeNode/internal/caches"
							 | 
						||
| 
								 | 
							
									"io"
							 | 
						||
| 
								 | 
							
									"os"
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestGzipReader(t *testing.T) {
							 | 
						||
| 
								 | 
							
									fp, err := os.Open("/Users/WorkSpace/EdgeProject/EdgeCache/p43/36/7e/367e02720713fe05b66573a1d69b4f0a.cache")
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										// not fatal
							 | 
						||
| 
								 | 
							
										t.Log(err)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									defer func() {
							 | 
						||
| 
								 | 
							
										_ = fp.Close()
							 | 
						||
| 
								 | 
							
									}()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var buf = make([]byte, 32*1024)
							 | 
						||
| 
								 | 
							
									cacheReader := caches.NewFileReader(fp)
							 | 
						||
| 
								 | 
							
									err = cacheReader.Init()
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										t.Fatal(err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									var headerBuf = []byte{}
							 | 
						||
| 
								 | 
							
									err = cacheReader.ReadHeader(buf, func(n int) (goNext bool, err error) {
							 | 
						||
| 
								 | 
							
										headerBuf = append(headerBuf, buf[:n]...)
							 | 
						||
| 
								 | 
							
										for {
							 | 
						||
| 
								 | 
							
											nIndex := bytes.Index(headerBuf, []byte{'\n'})
							 | 
						||
| 
								 | 
							
											if nIndex >= 0 {
							 | 
						||
| 
								 | 
							
												row := headerBuf[:nIndex]
							 | 
						||
| 
								 | 
							
												spaceIndex := bytes.Index(row, []byte{':'})
							 | 
						||
| 
								 | 
							
												if spaceIndex <= 0 {
							 | 
						||
| 
								 | 
							
													return false, errors.New("invalid header '" + string(row) + "'")
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												headerBuf = headerBuf[nIndex+1:]
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												break
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return true, nil
							 | 
						||
| 
								 | 
							
									})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									reader, err := NewGzipReader(cacheReader)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										t.Fatal(err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for {
							 | 
						||
| 
								 | 
							
										n, err := reader.Read(buf)
							 | 
						||
| 
								 | 
							
										if err != nil {
							 | 
						||
| 
								 | 
							
											if err != io.EOF {
							 | 
						||
| 
								 | 
							
												t.Fatal(err)
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												break
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										t.Log(string(buf[:n]))
							 | 
						||
| 
								 | 
							
										_ = n
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |