]> git.saurik.com Git - apt.git/blob - test/libapt/extracttar_test.cc
For ReMap to work, S has to be marked volatile :/.
[apt.git] / test / libapt / extracttar_test.cc
1 #include <apt-pkg/error.h>
2 #include <apt-pkg/extracttar.h>
3 #include <iostream>
4 #include <stdlib.h>
5
6 #include <gtest/gtest.h>
7 #include "assert.h"
8
9 class Stream : public pkgDirStream
10 {
11 public:
12 int count;
13 Stream () { count = 0; }
14 virtual bool DoItem(Item &Itm,int &Fd) { (void)Itm; (void)Fd; count++; return true; }
15 virtual bool Fail(Item &Itm,int Fd) { (void)Itm; (void)Fd; return true; }
16 virtual bool FinishedFile(Item &Itm,int Fd) { (void)Itm; (void)Fd; return true; }
17 virtual bool Process(Item &Itm,const unsigned char * Data, unsigned long Size,unsigned long Pos) { (void)Itm; (void) Data; (void) Size; (void) Pos; return true; }
18 virtual ~Stream() {}
19 };
20
21 TEST(ExtractTar, ExtractTar)
22 {
23 EXPECT_EQ(system("tar c /etc/passwd 2>/dev/null | gzip > tar.tgz"), 0);
24
25 FileFd fd("tar.tgz", FileFd::ReadOnly);
26 unlink("tar.tgz");
27 ExtractTar tar(fd, -1, "gzip");
28
29 // Run multiple times, because we want to check not only that extraction
30 // works, but also that it works multiple times (important for python-apt)
31 for (int i = 0; i < 5; i++) {
32 Stream stream;
33 fd.Seek(0);
34 tar.Go(stream);
35 if (_error->PendingError()) {
36 _error->DumpErrors();
37 EXPECT_FALSE(true);
38 }
39 EXPECT_EQ(stream.count, 1);
40 }
41 }