Skip to content

Commit ab5ace5

Browse files
committed
VersionBehaviorTest: DateTime version is not for MySQL
MySQL has different precision so version on reading will be cut to 6 digits of precision but dotnet one has 7, so equality will never be true
1 parent 0d5241f commit ab5ace5

1 file changed

Lines changed: 110 additions & 14 deletions

File tree

Orm/Xtensive.Orm.Tests/Storage/VersionBehaviorTest.cs

Lines changed: 110 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class AnotherManualInheritor : Manual
8585
}
8686

8787
[HierarchyRoot]
88-
public class Auto : Base
88+
public class DateTimeVersionAuto : Base
8989
{
9090
[Field, Key]
9191
public int Id { get; private set; }
@@ -95,7 +95,25 @@ public class Auto : Base
9595
public DateTime Date { get; set; }
9696
}
9797

98-
public class AutoInheritor : Auto
98+
public class DateTimeAutoInheritor : DateTimeVersionAuto
99+
{
100+
[Field]
101+
[Version(VersionMode.Auto)]
102+
public Guid Uid { get; set; }
103+
}
104+
105+
[HierarchyRoot]
106+
public class LongVersionAuto : Base
107+
{
108+
[Field, Key]
109+
public int Id { get; private set; }
110+
111+
[Field]
112+
[Version(VersionMode.Auto)]
113+
public long Version { get; set; }
114+
}
115+
116+
public class LongAutoInheritor : LongVersionAuto
99117
{
100118
[Field]
101119
[Version(VersionMode.Auto)]
@@ -315,24 +333,26 @@ public void ManualTest()
315333
[Test]
316334
public void AutoTest()
317335
{
336+
Require.ProviderIsNot(StorageProvider.MySql, "DateTime type has less precision on server side");
337+
318338
var config = DomainConfigurationFactory.Create();
319339
config.Types.Register(typeof (Base));
320-
config.Types.Register(typeof (Auto));
321-
config.Types.Register(typeof (AutoInheritor));
340+
config.Types.Register(typeof (DateTimeVersionAuto));
341+
config.Types.Register(typeof (DateTimeAutoInheritor));
322342
var domain = Domain.Build(config);
323-
var autoTypeInfo = domain.Model.Types[typeof(Auto)];
324-
var autoInheritorTypeInfo = domain.Model.Types[typeof(AutoInheritor)];
343+
var autoTypeInfo = domain.Model.Types[typeof(DateTimeVersionAuto)];
344+
var autoInheritorTypeInfo = domain.Model.Types[typeof(DateTimeAutoInheritor)];
325345
Assert.AreEqual(1, autoTypeInfo.GetVersionColumns().Count);
326346
Assert.AreEqual(2, autoInheritorTypeInfo.GetVersionColumns().Count);
327347
using (var session = domain.OpenSession()) {
328348
var versions = new VersionSet();
329349
var updatedVersions = new VersionSet();
330-
Auto auto;
331-
AutoInheritor autoInheritor;
350+
DateTimeVersionAuto auto;
351+
DateTimeAutoInheritor autoInheritor;
332352
using (VersionCapturer.Attach(session, versions))
333353
using (var t = session.OpenTransaction()) {
334-
auto = new Auto() { Content = "Content", Tag = "Tag"};
335-
autoInheritor = new AutoInheritor() { Content = "Content", Tag = "Tag"};
354+
auto = new DateTimeVersionAuto() { Content = "Content", Tag = "Tag"};
355+
autoInheritor = new DateTimeAutoInheritor() { Content = "Content", Tag = "Tag"};
336356
t.Complete();
337357
}
338358
using (VersionCapturer.Attach(session, updatedVersions))
@@ -363,11 +383,11 @@ public void AutoTest()
363383
using (var session = domain.OpenSession())
364384
using (VersionCapturer.Attach(session, allVersions))
365385
using (VersionValidator.Attach(session, allVersions)) {
366-
Auto auto;
367-
AutoInheritor autoInheritor;
386+
DateTimeVersionAuto auto;
387+
DateTimeAutoInheritor autoInheritor;
368388
using (var t = session.OpenTransaction()) {
369-
auto = new Auto() { Content = "Content", Tag = "Tag"};
370-
autoInheritor = new AutoInheritor() { Content = "Content", Tag = "Tag"};
389+
auto = new DateTimeVersionAuto() { Content = "Content", Tag = "Tag"};
390+
autoInheritor = new DateTimeAutoInheritor() { Content = "Content", Tag = "Tag"};
371391
t.Complete();
372392
}
373393
using (var t = session.OpenTransaction()) {
@@ -384,7 +404,83 @@ public void AutoTest()
384404
t.Complete();
385405
}
386406
}
407+
}
408+
409+
[Test]
410+
public void AutoTestNoDateTime()
411+
{
412+
Require.ProviderIs(StorageProvider.MySql, "DateTime type has less precision on server side");
413+
414+
var config = DomainConfigurationFactory.Create();
415+
config.Types.Register(typeof(Base));
416+
config.Types.Register(typeof(LongVersionAuto));
417+
config.Types.Register(typeof(LongAutoInheritor));
418+
var domain = Domain.Build(config);
419+
var autoTypeInfo = domain.Model.Types[typeof(LongVersionAuto)];
420+
var autoInheritorTypeInfo = domain.Model.Types[typeof(LongAutoInheritor)];
421+
Assert.AreEqual(1, autoTypeInfo.GetVersionColumns().Count);
422+
Assert.AreEqual(2, autoInheritorTypeInfo.GetVersionColumns().Count);
423+
using (var session = domain.OpenSession()) {
424+
var versions = new VersionSet();
425+
var updatedVersions = new VersionSet();
426+
LongVersionAuto auto;
427+
LongAutoInheritor autoInheritor;
428+
using (VersionCapturer.Attach(session, versions))
429+
using (var t = session.OpenTransaction()) {
430+
auto = new LongVersionAuto() { Content = "Content", Tag = "Tag" };
431+
autoInheritor = new LongAutoInheritor() { Content = "Content", Tag = "Tag" };
432+
t.Complete();
433+
}
434+
using (VersionCapturer.Attach(session, updatedVersions))
435+
using (VersionValidator.Attach(session, versions))
436+
using (var t = session.OpenTransaction()) {
437+
auto.Content = "AnotherContent";
438+
auto.Content = "AnotherContetnCorrect";
439+
autoInheritor.Content = "AnotherContent";
440+
autoInheritor.Content = "AnotherContetnCorrect";
441+
t.Complete();
442+
}
443+
AssertEx.Throws<VersionConflictException>(() => {
444+
using (VersionValidator.Attach(session, versions))
445+
using (var t = session.OpenTransaction()) {
446+
auto.Tag = "AnotherTag";
447+
autoInheritor.Tag = "AnotherTag";
448+
t.Complete();
449+
}
450+
});
451+
452+
using (VersionValidator.Attach(session, updatedVersions))
453+
using (var t = session.OpenTransaction()) {
454+
auto.Tag = "AnotherTag";
455+
autoInheritor.Tag = "AnotherTag";
456+
t.Complete();
457+
}
458+
}
459+
var allVersions = new VersionSet();
460+
using (var session = domain.OpenSession())
461+
using (VersionCapturer.Attach(session, allVersions))
462+
using (VersionValidator.Attach(session, allVersions)) {
463+
LongVersionAuto auto;
464+
LongAutoInheritor autoInheritor;
465+
using (var t = session.OpenTransaction()) {
466+
auto = new LongVersionAuto() { Content = "Content", Tag = "Tag" };
467+
autoInheritor = new LongAutoInheritor() { Content = "Content", Tag = "Tag" };
468+
t.Complete();
469+
}
470+
using (var t = session.OpenTransaction()) {
471+
auto.Content = "AnotherContent";
472+
auto.Content = "AnotherContetnCorrect";
473+
autoInheritor.Content = "AnotherContent";
474+
autoInheritor.Content = "AnotherContetnCorrect";
475+
t.Complete();
476+
}
387477

478+
using (var t = session.OpenTransaction()) {
479+
auto.Tag = "AnotherTag";
480+
autoInheritor.Tag = "AnotherTag";
481+
t.Complete();
482+
}
483+
}
388484
}
389485

390486
[Test]

0 commit comments

Comments
 (0)