You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
4.7 KiB
196 lines
4.7 KiB
// textend.cpp -- Regression test program, commit extend tests
|
|
// $Id$
|
|
// This is part of Metakit, the homepage is http://www.equi4.com/metakit/
|
|
|
|
#include "regress.h"
|
|
|
|
const int kSize1 = 41;
|
|
const int kSize2 = 85;
|
|
|
|
void TestExtend()
|
|
{
|
|
B(e01, Extend new file, 0) W(e01a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_Storage s1 ("e01a", 2);
|
|
A(s1.Strategy().FileSize() == 0);
|
|
c4_View v1 = s1.GetAs("a[p1:I]");
|
|
v1.Add(p1 [123]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
v1.Add(p1 [456]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize2);
|
|
} D(e01a); R(e01a); E;
|
|
|
|
B(e02, Extend committing twice, 0) W(e02a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_Storage s1 ("e02a", 2);
|
|
A(s1.Strategy().FileSize() == 0);
|
|
c4_View v1 = s1.GetAs("a[p1:I]");
|
|
v1.Add(p1 [123]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
v1.Add(p1 [456]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize2);
|
|
} D(e02a); R(e02a); E;
|
|
|
|
B(e03, Read during extend, 0) W(e03a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_Storage s1 ("e03a", 2);
|
|
A(s1.Strategy().FileSize() == 0);
|
|
c4_View v1 = s1.GetAs("a[p1:I]");
|
|
v1.Add(p1 [123]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
|
|
{
|
|
c4_Storage s2 ("e03a", 0);
|
|
c4_View v2 = s2.View("a");
|
|
A(v2.GetSize() == 1);
|
|
A(p1 (v2[0]) == 123);
|
|
}
|
|
|
|
v1.Add(p1 [456]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize2);
|
|
|
|
{
|
|
c4_Storage s3 ("e03a", 0);
|
|
c4_View v3 = s3.View("a");
|
|
A(v3.GetSize() == 2);
|
|
A(p1 (v3[0]) == 123);
|
|
A(p1 (v3[1]) == 456);
|
|
}
|
|
} D(e03a); R(e03a); E;
|
|
|
|
B(e04, Extend during read, 0) W(e04a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
|
|
{
|
|
c4_Storage s1 ("e04a", 2);
|
|
A(s1.Strategy().FileSize() == 0);
|
|
c4_View v1 = s1.GetAs("a[p1:I]");
|
|
v1.Add(p1 [123]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
}
|
|
|
|
c4_Storage s2 ("e04a", 0);
|
|
c4_View v2 = s2.View("a");
|
|
A(v2.GetSize() == 1);
|
|
A(p1 (v2[0]) == 123);
|
|
|
|
c4_Storage s3 ("e04a", 0); // open, don't load
|
|
|
|
{
|
|
c4_Storage s4 ("e04a", 2);
|
|
A(s4.Strategy().FileSize() == kSize1);
|
|
c4_View v4 = s4.View("a");
|
|
v4.Add(p1 [123]);
|
|
s4.Commit();
|
|
A(s4.Strategy().FileSize() > kSize1); // == kSize2);
|
|
}
|
|
|
|
c4_View v2a = s2.View("a");
|
|
A(v2a.GetSize() == 1);
|
|
A(p1 (v2a[0]) == 123);
|
|
|
|
c4_View v3 = s3.View("a");
|
|
A(v3.GetSize() == 1);
|
|
A(p1 (v3[0]) == 123);
|
|
|
|
} D(e04a); R(e04a); E;
|
|
|
|
B(e05, Test memory mapping, 0) W(e05a);
|
|
{
|
|
// this is not a test of MK, but of the underlying system code
|
|
|
|
{
|
|
c4_FileStrategy fs;
|
|
bool f1 = fs.DataOpen("e05a", 1);
|
|
A(!f1);
|
|
fs.DataWrite(0, "hi!", 3);
|
|
A(fs._failure == 0);
|
|
A(fs.FileSize() == 3);
|
|
fs.DataCommit(0);
|
|
A(fs.FileSize() == 3);
|
|
fs.ResetFileMapping();
|
|
if (fs._mapStart != 0)
|
|
{
|
|
A(fs._dataSize == 3);
|
|
c4_String s ((char*) fs._mapStart, 3);
|
|
A(s == "hi!");
|
|
}
|
|
fs.DataWrite(3, "hello", 5);
|
|
A(fs._failure == 0);
|
|
A(fs.FileSize() == 8);
|
|
fs.DataCommit(0);
|
|
A(fs.FileSize() == 8);
|
|
if (fs._mapStart != 0)
|
|
{
|
|
A(fs._dataSize == 3);
|
|
c4_String s ((char*) fs._mapStart, 8);
|
|
A(s == "hi!hello");
|
|
}
|
|
fs.DataWrite(100, "wow!", 4);
|
|
A(fs._failure == 0);
|
|
A(fs.FileSize() == 104);
|
|
fs.DataCommit(0);
|
|
A(fs.FileSize() == 104);
|
|
fs.ResetFileMapping();
|
|
if (fs._mapStart != 0)
|
|
{
|
|
A(fs._dataSize == 104);
|
|
c4_String s ((char*) fs._mapStart + 100, 4);
|
|
A(s == "wow!");
|
|
}
|
|
}
|
|
|
|
// clear the file, so dump doesn't choke on it
|
|
FILE* fp = fopen("e05a", "w");
|
|
A(fp != 0);
|
|
fclose(fp);
|
|
|
|
} D(e05a); R(e05a); E;
|
|
|
|
B(e06, Rollback during extend, 0) W(e06a);
|
|
{
|
|
c4_IntProp p1 ("p1");
|
|
c4_Storage s1 ("e06a", 2);
|
|
A(s1.Strategy().FileSize() == 0);
|
|
c4_View v1 = s1.GetAs("a[p1:I]");
|
|
v1.Add(p1 [123]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize1);
|
|
|
|
c4_Storage s2 ("e06a", 0);
|
|
c4_View v2 = s2.View("a");
|
|
A(v2.GetSize() == 1);
|
|
A(p1 (v2[0]) == 123);
|
|
|
|
v1.Add(p1 [456]);
|
|
s1.Commit();
|
|
A(s1.Strategy().FileSize() == kSize2);
|
|
#if 0
|
|
/* fails on NT + Samba, though it works fine with mmap'ing disabled */
|
|
s2.Rollback();
|
|
|
|
c4_View v2a = s2.View("a");
|
|
A(v2a.GetSize() == 2);
|
|
A(p1 (v2a[0]) == 123);
|
|
A(p1 (v2a[1]) == 456);
|
|
#else
|
|
c4_View v2a = s2.View("a");
|
|
A(v2a.GetSize() == 1);
|
|
A(p1 (v2a[0]) == 123);
|
|
#endif
|
|
} D(e06a); R(e06a); E;
|
|
}
|