public Put ( VxSchema schema, VxSchemaChecksums sums, VxPutOpts opts ) : VxSchemaErrors | ||
schema | VxSchema | |
sums | VxSchemaChecksums | |
opts | VxPutOpts | |
Результат | VxSchemaErrors |
public void TestSubmoduleExceptions() { VxSchema schema1 = new VxSchema(); VxSchemaChecksums sums1 = new VxSchemaChecksums(); VxSchema schema2 = new VxSchema(); VxSchemaChecksums sums2 = new VxSchemaChecksums(); schema1.Add("Procedure", "Func1", "Random contents", false); sums1.AddSum("Procedure/Func1", 1); schema2.Add("Procedure", "Func1", "Random contents 2", false); sums2.AddSum("Procedure/Func1", 2); string tmpdir = GetTempDir(); try { Directory.CreateDirectory(tmpdir); VxDiskSchema disk = new VxDiskSchema(tmpdir); disk.Put(schema2, sums2, VxPutOpts.None); try { WVEXCEPT(VxDiskSchema.AddFromDir(tmpdir, schema1, sums1)) } catch (System.ArgumentException e) { WVPASSEQ(e.Message, "Conflicting schema key: Procedure/Func1"); } } finally { Directory.Delete(tmpdir, true); } WVPASS(!Directory.Exists(tmpdir)); }
public void TestSubmoduleSupport() { VxSchema schema1 = new VxSchema(); VxSchemaChecksums sums1 = new VxSchemaChecksums(); VxSchema schema2 = new VxSchema(); VxSchemaChecksums sums2 = new VxSchemaChecksums(); schema1.Add("Table", "Tab1", "column: name=random\n", false); sums1.AddSum("Table/Tab1", 1); schema2.Add("Table", "Tab2", "column: name=ignored\n", false); sums2.AddSum("Table/Tab2", 2); string tmpdir = GetTempDir(); try { Directory.CreateDirectory(tmpdir); VxDiskSchema disk = new VxDiskSchema(tmpdir); disk.Put(schema2, sums2, VxPutOpts.None); VxDiskSchema.AddFromDir(tmpdir, schema1, sums1); WVPASSEQ(sums1["Table/Tab1"].GetSumString(), "0x00000001"); WVPASSEQ(schema1["Table/Tab1"].name, "Tab1"); WVPASSEQ(schema1["Table/Tab1"].type, "Table"); WVPASSEQ(schema1["Table/Tab1"].text, "column: name=random\n"); WVPASSEQ(schema1["Table/Tab1"].encrypted, false); WVPASSEQ(sums1["Table/Tab2"].GetSumString(), "0x00000002"); WVPASSEQ(schema1["Table/Tab2"].name, "Tab2"); WVPASSEQ(schema1["Table/Tab2"].type, "Table"); WVPASSEQ(schema1["Table/Tab2"].text, "column: name=ignored\n"); WVPASSEQ(schema1["Table/Tab2"].encrypted, false); } finally { Directory.Delete(tmpdir, true); } WVPASS(!Directory.Exists(tmpdir)); }
public void TestReadChecksums() { SchemaCreator sc = new SchemaCreator(this); sc.Create(); string tmpdir = GetTempDir(); DirectoryInfo tmpdirinfo = new DirectoryInfo(tmpdir); try { tmpdirinfo.Create(); VxSchema schema = dbus.Get(); VxSchemaChecksums sums = dbus.GetChecksums(); VxDiskSchema backend = new VxDiskSchema(tmpdir); backend.Put(schema, sums, VxPutOpts.None); VxSchemaChecksums fromdisk = backend.GetChecksums(); foreach (KeyValuePair<string, VxSchemaChecksum> p in sums) WVPASSEQ(p.Value.GetSumString(), fromdisk[p.Key].GetSumString()); WVPASSEQ(sums.Count, fromdisk.Count); // Test that changing a file invalidates its checksums, and that // we skip directories named "DATA" using (StreamWriter sw = File.AppendText( wv.PathCombine(tmpdir, "Table", "Tab1"))) { sw.WriteLine("Ooga Booga"); } Directory.CreateDirectory(Path.Combine(tmpdir, "DATA")); File.WriteAllText(wv.PathCombine(tmpdir, "DATA", "Decoy"), "Decoy file, shouldn't have checksums"); VxSchemaChecksums mangled = backend.GetChecksums(); // Check that the decoy file didn't get read WVFAIL(mangled.ContainsKey("DATA/Decoy")); // Check that the mangled checksums exist, but are empty. WVASSERT(mangled.ContainsKey("Table/Tab1")); WVASSERT(mangled["Table/Tab1"].GetSumString() != sums["Table/Tab1"].GetSumString()); WVPASSEQ(mangled["Table/Tab1"].GetSumString(), ""); // Check that everything else is still sensible foreach (KeyValuePair<string, VxSchemaChecksum> p in sums) { if (p.Key != "Table/Tab1") WVPASSEQ(p.Value.GetSumString(), mangled[p.Key].GetSumString()); } } finally { tmpdirinfo.Delete(true); sc.Cleanup(); } WVASSERT(!tmpdirinfo.Exists); }
public void TestExportSchema() { SchemaCreator sc = new SchemaCreator(this); string tmpdir = GetTempDir(); DirectoryInfo tmpdirinfo = new DirectoryInfo(tmpdir); try { tmpdirinfo.Create(); // Establish a baseline for the number of existing elements. VxSchema schema = dbus.Get(); VxSchemaChecksums sums = dbus.GetChecksums(); VxDiskSchema disk = new VxDiskSchema(tmpdir); disk.Put(schema, sums, VxPutOpts.None); var base_filecounts = GetFileCounts(tmpdir); // Clobber the directory and start fresh. tmpdirinfo.Delete(true); tmpdirinfo.Create(); // Now create our test schema and do the real tests. sc.Create(); // Check that having mangled checksums fails schema = dbus.Get(); sums = new VxSchemaChecksums(); disk = new VxDiskSchema(tmpdir); try { WVEXCEPT(disk.Put(schema, sums, VxPutOpts.None)); } catch (Wv.Test.WvAssertionFailure e) { throw e; } catch (System.Exception e) { WVPASS(e is ArgumentException); WVPASS(e.Message.StartsWith("Missing checksum for ")); log.print(e.ToString() + "\n"); } // Check that the normal exporting works. schema = dbus.Get(); sums = dbus.GetChecksums(); WVPASSEQ(schema.Count, sums.Count); disk.Put(schema, sums, VxPutOpts.None); int backup_generation = 0; VerifyExportedSchema(tmpdir, schema, sums, sc, backup_generation, base_filecounts); // Check that we read back the same stuff VxSchema schemafromdisk = disk.Get(null); VxSchemaChecksums sumsfromdisk = disk.GetChecksums(); WVPASS(1); TestSchemaEquality(schema, schemafromdisk); TestChecksumEquality(sums, sumsfromdisk); WVPASS(2); // Doing it twice doesn't change anything. disk.Put(schema, sums, VxPutOpts.None); VerifyExportedSchema(tmpdir, schema, sums, sc, backup_generation, base_filecounts); WVPASS(3); // Check backup mode disk.Put(schema, sums, VxPutOpts.IsBackup); backup_generation++; VerifyExportedSchema(tmpdir, schema, sums, sc, backup_generation, base_filecounts); WVPASS(4); // Check backup mode again disk.Put(schema, sums, VxPutOpts.IsBackup); backup_generation++; VerifyExportedSchema(tmpdir, schema, sums, sc, backup_generation, base_filecounts); WVPASS(5); } finally { tmpdirinfo.Delete(true); sc.Cleanup(); } WVASSERT(!tmpdirinfo.Exists); }
public void TestDropSchemaFromDisk() { string tmpdir = GetTempDir(); try { Directory.CreateDirectory(tmpdir); VxDiskSchema backend = new VxDiskSchema(tmpdir); VxSchema schema = new VxSchema(); schema.Add("Table", "Foo", "column: name=foo,type=int\n", false); schema.Add("Table", "Bar", "column: name=bar,type=int\n", false); schema.Add("Procedure", "Func1", "Func1 contents", false); schema.Add("ScalarFunction", "Func2", "Func2 contents", false); VxSchemaChecksums sums = new VxSchemaChecksums(); sums.AddSum("Table/Foo", 1); sums.AddSum("Table/Bar", 2); sums.AddSum("Procedure/Func1", 3); sums.AddSum("ScalarFunction/Func2", 5); backend.Put(schema, sums, VxPutOpts.None); WVPASS(File.Exists(Path.Combine(tmpdir, "Table/Foo"))); WVPASS(File.Exists(Path.Combine(tmpdir, "Table/Bar"))); WVPASS(File.Exists(Path.Combine(tmpdir, "Procedure/Func1"))); WVPASS(File.Exists(Path.Combine(tmpdir, "ScalarFunction/Func2"))); VxSchema newschema = backend.Get(null); VxSchemaChecksums newsums = backend.GetChecksums(); WVPASSEQ(newschema.Count, schema.Count); WVPASSEQ(newsums.Count, sums.Count); WVPASS(newschema.ContainsKey("Table/Foo")); WVPASS(newschema.ContainsKey("Table/Bar")); WVPASS(newschema.ContainsKey("Procedure/Func1")); WVPASS(newschema.ContainsKey("ScalarFunction/Func2")); string[] todrop = { "Table/Foo" }; backend.DropSchema(todrop); WVPASS(!File.Exists(Path.Combine(tmpdir, "Table/Foo"))) WVPASS(File.Exists(Path.Combine(tmpdir, "Table/Bar"))) WVPASS(File.Exists(Path.Combine(tmpdir, "Procedure/Func1"))) WVPASS(File.Exists(Path.Combine(tmpdir, "ScalarFunction/Func2"))) newschema = backend.Get(null); newsums = backend.GetChecksums(); WVPASSEQ(newschema.Count, 3); WVPASSEQ(newsums.Count, 3); WVPASS(!newschema.ContainsKey("Table/Foo")); WVPASS(newschema.ContainsKey("Table/Bar")); WVPASS(newschema.ContainsKey("Procedure/Func1")); WVPASS(newschema.ContainsKey("ScalarFunction/Func2")); todrop = new string[] { "Procedure/Func1", "ScalarFunction/Func2" }; backend.DropSchema(todrop); WVPASS(!File.Exists(Path.Combine(tmpdir, "Table/Foo"))) WVPASS(File.Exists(Path.Combine(tmpdir, "Table/Bar"))) WVPASS(!File.Exists(Path.Combine(tmpdir, "Procedure/Func1"))) WVPASS(!File.Exists(Path.Combine(tmpdir, "ScalarFunction/Func2"))) newschema = backend.Get(null); newsums = backend.GetChecksums(); WVPASSEQ(newschema.Count, 1); WVPASSEQ(newsums.Count, 1); WVPASS(!newschema.ContainsKey("Table/Foo")); WVPASS(newschema.ContainsKey("Table/Bar")); WVPASS(!newschema.ContainsKey("Procedure/Func1")); WVPASS(!newschema.ContainsKey("ScalarFunction/Func2")); } finally { Directory.Delete(tmpdir, true); } WVPASS(!Directory.Exists(tmpdir)); }
public void TestExportEmptySchema() { string tmpdir = GetTempDir(); try { Directory.CreateDirectory(tmpdir); VxSchema schema = new VxSchema(); VxSchemaChecksums sums = new VxSchemaChecksums(); // Check that exporting an empty schema doesn't touch anything. VxDiskSchema backend = new VxDiskSchema(tmpdir); backend.Put(schema, sums, VxPutOpts.None); WVPASSEQ(Directory.GetDirectories(tmpdir).Length, 0); WVPASSEQ(Directory.GetFiles(tmpdir).Length, 0); } finally { Directory.Delete(tmpdir); } WVASSERT(!Directory.Exists(tmpdir)); }