(data [][]byte)
| 36 | } |
| 37 | |
| 38 | func MakeZsyncControl(data [][]byte) bytes.Buffer { |
| 39 | blocksize := len(data[0]) |
| 40 | |
| 41 | // Build control file: headers then binary checksums |
| 42 | var buf bytes.Buffer |
| 43 | buf.WriteString("zsync: 0.7.0\n") |
| 44 | fmt.Fprintf(&buf, "Length: %d\n", (len(data)-1)*blocksize+len(data[len(data)-1])) |
| 45 | fmt.Fprintf(&buf, "Blocksize: %d\n", blocksize) |
| 46 | buf.WriteString("Hash-Lengths: 1,4,16\n") |
| 47 | buf.WriteString("Filename: testfile\n") |
| 48 | buf.WriteString("URL: http://example.com/foo\n") |
| 49 | buf.WriteString("\n") |
| 50 | |
| 51 | for _, d := range data { |
| 52 | // compute rsum and md4 |
| 53 | rsum := rcksum.CalcRsumBlock(d) |
| 54 | md4sum := rcksum.CalcChecksum(d) |
| 55 | |
| 56 | // write rsum as big-endian two uint16 |
| 57 | var rsumBuf [4]byte |
| 58 | binary.Encode(rsumBuf[:4], binary.BigEndian, rsum) |
| 59 | buf.Write(rsumBuf[:4]) |
| 60 | // write md4 |
| 61 | buf.Write(md4sum[:]) |
| 62 | } |
| 63 | return buf |
| 64 | } |
| 65 | |
| 66 | // TestNewAndEnd verifies that zsync.New can parse a minimal control file |
| 67 | // and that End closes the temporary file. |
no test coverage detected