Skip to content

Commit a7f514a

Browse files
committed
[ntuple] test failure on streamer field type mismatch
1 parent fb3284d commit a7f514a

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

tree/ntuple/test/StreamerField.hxx

+8
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,12 @@ struct NewStreamerName {
6464
T fValue;
6565
};
6666

67+
struct TemperatureCelsius {
68+
float fValue;
69+
};
70+
71+
struct TemperatureKelvin {
72+
float fValue;
73+
};
74+
6775
#endif // ROOT_RNTuple_Test_StreamerField

tree/ntuple/test/StreamerFieldLinkDef.h

+3
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@
1616
#pragma link C++ options = rntupleStreamerMode(true), version(3) class NewStreamerName < int> + ;
1717
#pragma read sourceClass = "OldStreamerName<int>" targetClass = "NewStreamerName<int>" version = "[3]"
1818

19+
#pragma link C++ options = rntupleStreamerMode(true) class TemperatureCelsius + ;
20+
#pragma link C++ options = rntupleStreamerMode(true) class TemperatureKelvin + ;
21+
1922
#endif

tree/ntuple/test/rfield_streamer.cxx

+28
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,31 @@ TEST(RField, StreamerSchemaEvolution)
327327
reader->LoadEntry(0);
328328
EXPECT_EQ(137, ptrF->fValue);
329329
}
330+
331+
TEST(RField, StreamerClassMismatch)
332+
{
333+
FileRaii fileGuard("test_ntuple_rfield_streamer_class_mismatch.root");
334+
{
335+
auto model = RNTupleModel::Create();
336+
model->AddField(RFieldBase::Create("f", "TemperatureCelsius").Unwrap());
337+
auto writer = RNTupleWriter::Recreate(std::move(model), "ntpl", fileGuard.GetPath());
338+
auto ptrF = writer->GetModel().GetDefaultEntry().GetPtr<TemperatureCelsius>("f");
339+
ptrF->fValue = 100.;
340+
writer->Fill();
341+
}
342+
343+
auto model = RNTupleModel::Create();
344+
model->AddField(RFieldBase::Create("f", "TemperatureKelvin").Unwrap());
345+
auto reader = RNTupleReader::Open(std::move(model), "ntpl", fileGuard.GetPath());
346+
347+
ASSERT_EQ(1U, reader->GetNEntries());
348+
auto ptrF = reader->GetModel().GetDefaultEntry().GetPtr<TemperatureKelvin>("f");
349+
350+
// TODO(jblomer): this should fail with an exception when we connect the page source
351+
ROOT::TestSupport::CheckDiagsRAII diagRAII;
352+
diagRAII.requiredDiag(kError, "TBufferFile::ReadVersion", "Could not find the StreamerInfo with a checksum of",
353+
false /* matchFullMessage */);
354+
diagRAII.requiredDiag(kError, "TBufferFile::CheckByteCount", "object of class TemperatureKelvin read too few bytes",
355+
false /* matchFullMessage */);
356+
reader->LoadEntry(0);
357+
}

0 commit comments

Comments
 (0)