static void setup_asfds_proto1_stuff(struct asfd *asfd, struct slist *slist) { int r=0; int w=0; struct sbuf *s; for(s=slist->head; s; s=s->next) { if(sbuf_is_link(s)) { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); asfd_assert_write_iobuf(asfd, &w, 0, &s->link); } else if(sbuf_is_filedata(s)) { struct iobuf wbuf; // The string "data" gzipped. unsigned char gzipped_data1[10] = { 0x1f, 0x8b, 0x08, 0, 0, 0, 0, 0, 0x02, 0x03 }; unsigned char gzipped_data2[14] = { 0x4b, 0x49, 0x2c, 0x49, 0x04, 0x00, 0x63, 0xf3, 0xf3, 0xad, 0x04, 0x00, 0x00, 0x00 }; asfd_assert_write_iobuf(asfd, &w, 0, &s->protocol1->datapth); asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); if(sbuf_is_encrypted(s)) { // Encrypted files get sent as is. asfd_assert_write(asfd, &w, 0, CMD_APPEND, "data"); asfd_assert_write(asfd, &w, 0, CMD_END_FILE, "4:8d777f385d3dfec8815d20f7496026dc"); continue; } // Protocol1 always sends it gzipped. iobuf_set(&wbuf, CMD_APPEND, (char *)gzipped_data1, sizeof(gzipped_data1)); asfd_assert_write_iobuf(asfd, &w, 0, &wbuf); iobuf_set(&wbuf, CMD_APPEND, (char *)gzipped_data2, sizeof(gzipped_data2)); asfd_assert_write_iobuf(asfd, &w, 0, &wbuf); asfd_assert_write(asfd, &w, 0, CMD_END_FILE, "4:8d777f385d3dfec8815d20f7496026dc"); } else { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); } } asfd_assert_write(asfd, &w, 0, CMD_GEN, "restoreend"); asfd_mock_read_no_op(asfd, &r, 100); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restoreend_ok"); }
static void setup_writes_from_slist_blk_requests(struct asfd *asfd, int *aw, struct slist *slist, int number_of_blks, uint64_t interrupt) { struct sbuf *s; struct iobuf iobuf; char req[32]=""; int blk_index=1; uint64_t file_no=1; if(!slist) return; for(s=slist->head; s; s=s->next) { if(sbuf_is_filedata(s) && !sbuf_is_encrypted(s)) // Not working for proto2 yet. { int b; if(interrupt==file_no++) continue; for(b=0; b<number_of_blks; b++) { base64_from_uint64(blk_index++, req); iobuf_from_str(&iobuf, CMD_DATA_REQ, req); asfd_assert_write_iobuf(asfd, aw, 0, &iobuf); } } } }
static void setup_asfds_proto2_interrupt_on_non_filedata(struct asfd *asfd, struct slist *slist) { int r=0; int w=0; struct sbuf *s; asfd_assert_write(asfd, &w, 0, CMD_GEN, "restore_stream"); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restore_stream_ok"); for(s=slist->head; s; s=s->next) { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); } asfd_mock_read_no_op(asfd, &r, 1); asfd_mock_read(asfd, &r, 0, CMD_INTERRUPT, "00000"); asfd_assert_write(asfd, &w, 0, CMD_GEN, "restoreend"); asfd_mock_read_no_op(asfd, &r, 200); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restoreend_ok"); }
static void setup_asfds_proto2_interrupt(struct asfd *asfd, struct slist *slist) { int r=0; int w=0; struct sbuf *s; int count=0; asfd_assert_write(asfd, &w, 0, CMD_GEN, "restore_stream"); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restore_stream_ok"); for(s=slist->head; s; s=s->next) { if(sbuf_is_link(s)) { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); asfd_assert_write_iobuf(asfd, &w, 0, &s->link); asfd_mock_read_no_op(asfd, &r, 1); } else if(sbuf_is_filedata(s)) { struct blk *b; asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); asfd_mock_read_no_op(asfd, &r, 1); if(count++==1) { asfd_assert_write(asfd, &w, 0, CMD_DATA, "data"); asfd_assert_write(asfd, &w, 0, CMD_DATA, "data"); asfd_mock_read_no_op(asfd, &r, 2); asfd_mock_read(asfd, &r, 0, CMD_INTERRUPT, s->path.buf); asfd_assert_write(asfd, &w, 0, CMD_END_FILE, "0:0"); continue; } for(b=s->protocol2->bstart; b && b!=s->protocol2->bend; b=b->next) { asfd_assert_write(asfd, &w, 0, CMD_DATA, "data"); asfd_mock_read_no_op(asfd, &r, 1); } asfd_assert_write(asfd, &w, 0, CMD_END_FILE, "0:0"); asfd_mock_read_no_op(asfd, &r, 1); } else { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); asfd_mock_read_no_op(asfd, &r, 1); } } asfd_assert_write(asfd, &w, 0, CMD_GEN, "restoreend"); asfd_mock_read_no_op(asfd, &r, 200); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restoreend_ok"); }
static void setup_chfd_writes_from_slist(struct asfd *chfd, int *cw, struct slist *slist, int number_of_blks, uint64_t interrupt) { struct sbuf *s; struct blk blk; struct iobuf iobuf; uint64_t file_no=1; if(!slist) return; for(s=slist->head; s; s=s->next) { if(sbuf_is_filedata(s) && !sbuf_is_encrypted(s)) // Not working for proto2 yet. { int b; if(interrupt==file_no++) continue; blk.fingerprint=file_no; memset(&blk.md5sum, file_no, MD5_DIGEST_LENGTH); blk_to_iobuf_sig(&blk, &iobuf); for(b=0; b<number_of_blks; b++) asfd_assert_write_iobuf(chfd, cw, 0, &iobuf); } } }
END_TEST static void setup_asfds_proto2_stuff(struct asfd *asfd, struct slist *slist) { int r=0; int w=0; struct sbuf *s; asfd_assert_write(asfd, &w, 0, CMD_GEN, "restore_stream"); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restore_stream_ok"); for(s=slist->head; s; s=s->next) { if(sbuf_is_link(s)) { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); asfd_assert_write_iobuf(asfd, &w, 0, &s->link); } else if(sbuf_is_filedata(s)) { struct blk *b; asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); for(b=s->protocol2->bstart; b && b!=s->protocol2->bend; b=b->next) asfd_assert_write(asfd, &w, 0, CMD_DATA, "data"); asfd_assert_write(asfd, &w, 0, CMD_END_FILE, "0:0"); } else { asfd_assert_write_iobuf(asfd, &w, 0, &s->attr); asfd_assert_write_iobuf(asfd, &w, 0, &s->path); } } asfd_assert_write(asfd, &w, 0, CMD_GEN, "restoreend"); asfd_mock_read_no_op(asfd, &r, 300); asfd_mock_read(asfd, &r, 0, CMD_GEN, "restoreend_ok"); }