Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v38r1p1 (ae26267b)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FileMgrTest.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #include "FileMgrTest.h"
12 #include "GaudiKernel/IFileMgr.h"
14 #include "GaudiKernel/MsgStream.h"
15 #include "TFile.h"
16 #include "TSSLSocket.h"
17 
18 #include <fstream>
19 #include <stdio.h>
20 #ifndef __APPLE__
21 # include <ext/stdio_filebuf.h> // __gnu_cxx::stdio_filebuf
22 #endif // not __APPLE__
23 
24 // Static Factory declaration
25 
27 
28 
30 FileMgrTest::FileMgrTest( const std::string& name, ISvcLocator* pSvcLocator )
31  : Algorithm( name, pSvcLocator ), p_fileMgr( 0 ) {}
32 
33 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
34 
36 
38 
39  m_f1 = "/etc/redhat-release";
40  m_f2 = "t2.txt";
41  m_f3 = "t3.txt";
42  m_f4 = "t4.txt";
43 
44  m_fr1 = "tuple1.rt";
45  m_fr2 = "http://annwm.lbl.gov/~leggett/tuple2.rt";
46  m_fr3 = "https://t-dpm.grid.sinica.edu.tw/dpm/grid.sinica.edu.tw/home/atlas/atlasppsscratchdisk/mc10_7TeV/AOD/"
47  "e574_s1110_s1100_r1655_r1700/"
48  "mc10_7TeV.105805.filtered_minbias6.merge.AOD.e574_s1110_s1100_r1655_r1700_tid261524_00/"
49  "AOD.261524._032551.pool.root.1";
50 
51  if ( service( "FileMgr", p_fileMgr, true ).isFailure() ) {
52  error() << "unable to get the FileMgr" << endmsg;
54  } else {
55  debug() << "got the FileMgr" << endmsg;
56  }
57 
58  Io::bfcn_action_t boa =
59  std::bind( &FileMgrTest::PosixOpenAction, this, std::placeholders::_1, std::placeholders::_2 );
60  if ( p_fileMgr->regAction( boa, Io::OPEN, Io::POSIX, "FileMgrTest::POSIXOpenAction" ).isFailure() ) {
61  error() << "unable to register POSIX file open action with FileMgr" << endmsg;
62  }
63 
64  if ( p_fileMgr->regAction( boa, Io::OPEN_ERR, Io::POSIX, "FileMgrTest::PosixOpenAction" ).isFailure() ) {
65  error() << "unable to register POSIX file open ERR action with FileMgr" << endmsg;
66  }
67 
68  Io::bfcn_action_t bob = std::bind( &FileMgrTest::allCloseAction, this, std::placeholders::_1, std::placeholders::_2 );
69  if ( p_fileMgr->regAction( bob, Io::CLOSE ).isFailure() ) {
70  // "FileMgrTest::allCloseAction").isFailure()) {
71  error() << "unable to register all Close action with FileMgr" << endmsg;
72  }
73 
74  int r;
75 
76  r = p_fileMgr->open( Io::POSIX, name(), m_f1, Io::READ, fd_1, "ASCII" );
77  if ( r != 0 ) {
78  error() << "unable to open " << m_f1 << " for reading" << endmsg;
79  } else {
80  // fp_1 = fdopen(fd_1, "r");
81  fp_1 = (FILE*)p_fileMgr->fptr( fd_1 );
82  info() << "opened " << m_f1 << " for reading with FD: " << fd_1 << " FILE* " << fp_1 << endmsg;
83  }
84 
85  r = p_fileMgr->open( Io::POSIX, name(), m_f2, Io::WRITE | Io::CREATE, fd_2, "ASCII" );
86  if ( r != 0 ) {
87  error() << "unable to open " << m_f2 << " for writing" << endmsg;
88  } else {
89  // fp_2 = fdopen(fd_2,"w");
90  fp_2 = (FILE*)p_fileMgr->fptr( fd_2 );
91  info() << "opened " << m_f2 << " for writing with FD: " << fd_2 << " FILE* " << fp_2 << endmsg;
92  }
93 
94  // make sure we have something in m_f3 to append to;
95  std::ofstream ofs{ m_f3 };
96  ofs << "initial line" << std::endl;
97  ofs.close();
98 
99  r = p_fileMgr->open( Io::POSIX, name(), m_f3, Io::WRITE | Io::APPEND, fd_3, "ASCII" );
100  if ( r != 0 ) {
101  error() << "unable to open " << m_f3 << " for write|append" << endmsg;
102  } else {
103  // fp_3 = fdopen(fd_3,"a");
104  fp_3 = (FILE*)p_fileMgr->fptr( fd_3 );
105  info() << "opened " << m_f3 << " for reading with FD: " << fd_3 << " FILE* " << fp_3 << endmsg;
106  }
107 
108  Io::Fd fd;
109 
110  error() << "the following error is expected" << endmsg;
111  r = p_fileMgr->open( Io::POSIX, name(), m_f2, Io::WRITE | Io::CREATE | Io::EXCL, fd, "ASCII" );
112  if ( r != 0 ) {
113  info() << "unable to open " << m_f2 << " for WRITE|CREATE|EXCL - expected as file already exists" << endmsg;
114  } else {
115  error() << "opened " << m_f2 << " for reading with FD: " << fd << " This should not occur!" << endmsg;
116  }
117 
118  r = p_fileMgr->open( Io::POSIX, name(), m_f1, Io::READ, fd_4, "ASCII" );
119  if ( r != 0 ) {
120  error() << "unable to open " << m_f1 << " again for reading" << endmsg;
121  } else {
122  fp_4 = (FILE*)p_fileMgr->fptr( fd_4 );
123  info() << "opened " << m_f1 << " again for reading with FD: " << fd_4 << " FILE* " << fp_4 << endmsg;
124  }
125 
126  void* vp( 0 );
127  r = p_fileMgr->open( Io::ROOT, name(), m_fr1, Io::READ, vp, "HIST" );
128  if ( r != 0 ) {
129  error() << "unable to open " << m_fr1 << " again for reading" << endmsg;
130  } else {
131  fp_r1 = (TFile*)vp;
132  info() << "opened " << m_fr1 << " for reading with ptr: " << fp_r1 << endmsg;
133  }
134 
135  r = p_fileMgr->open( Io::ROOT, name(), m_fr2, Io::READ, vp, "HIST" );
136  if ( r != 0 ) {
137  error() << "unable to open " << m_fr2 << " for reading" << endmsg;
138  } else {
139  fp_r2 = (TFile*)vp;
140  info() << "opened " << m_fr2 << " for reading with ptr: " << fp_r2 << " size: " << fp_r2->GetSize() << endmsg;
141  }
142 
143  // std::string cafile, capath,ucert,ukey;
144  // cafile = "/tmp/x509up_u6919";
145  // capath = "/afs/cern.ch/project/gd/LCG-share2/certificates";
146  // ucert = cafile;
147  // ukey = cafile;
148 
149  // TSSLSocket::SetUpSSL(cafile.c_str(), capath.c_str(), ucert.c_str(), ukey.c_str());
150  r = p_fileMgr->open( Io::ROOT, name(), m_fr3, Io::READ, vp, "HIST" );
151  if ( r != 0 ) {
152  error() << "unable to open " << m_fr3 << " for reading" << endmsg;
153  } else {
154  fp_r3 = (TFile*)vp;
155  info() << "opened " << m_fr3 << " for reading with ptr: " << fp_r3 << " size: " << fp_r3->GetSize() << endmsg;
156  }
157 
158  for ( int j = 0; j < 2; ++j ) {
159  r = p_fileMgr->open( Io::POSIX, name(), "t6.txt", Io::WRITE | Io::CREATE, fd, "ASCII" );
160  if ( r != 0 ) {
161  error() << "unable to open t6.txt for writing" << endmsg;
162  } else {
163  info() << "opened t6.txt for writing, fd: " << fd << " will now close" << endmsg;
164  r = p_fileMgr->close( fd, name() );
165  if ( r != 0 ) {
166  error() << "unable to close " << m_f1 << " with FD " << fd_1 << endmsg;
167  } else {
168  info() << "closed " << name() << endmsg;
169  }
170  }
171  }
172 
173  return st;
174 }
175 
176 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
177 
179 
180 #ifndef __APPLE__
181  info() << "writing to " << p_fileMgr->fname( (void*)fp_2 ) << endmsg;
182 
183  std::ofstream ofs;
184  __gnu_cxx::stdio_filebuf<char> fb( fp_2, std::ios::out );
185 
186  ofs.std::ios::rdbuf( &fb );
187  ofs << "Hello World!" << std::endl;
188 
189  info() << "appending to " << p_fileMgr->fname( (void*)fp_3 ) << endmsg;
190 
191  std::ofstream ofs2;
192  __gnu_cxx::stdio_filebuf<char> fb2( fp_3, std::ios::out );
193 
194  ofs2.std::ios::rdbuf( &fb2 );
195  ofs2 << "Hello World!" << std::endl;
196 #endif // not __APPLE__
197 
198  return StatusCode::SUCCESS;
199 }
200 
201 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
202 
204 
207  int i = p_fileMgr->getFiles( v );
208 
209  auto& log = info();
210  log << "listing all open files [" << i << "]" << std::endl;
211  for ( itr = v.begin(); itr != v.end(); ++itr ) { log << " " << *itr << std::endl; }
212  log << endmsg;
213 
214  i = p_fileMgr->getFiles( v, false );
215  log << "listing ALL files [" << i << "]" << std::endl;
216  for ( itr = v.begin(); itr != v.end(); ++itr ) { log << " " << *itr << std::endl; }
217  log << endmsg;
218 
221  i = p_fileMgr->getFiles( Io::POSIX, v2, false );
222  log << "listing all POSIX files ever opened [" << i << "]" << std::endl;
223  for ( it2 = v2.begin(); it2 != v2.end(); ++it2 ) { log << " " << ( *it2 )->name() << std::endl; }
224  log << endmsg;
225 
226  int r;
227 
228  r = p_fileMgr->close( fd_1, name() );
229  if ( r != 0 ) {
230  error() << "unable to close " << m_f1 << " with FD " << fd_1 << endmsg;
231  } else {
232  info() << "closed " << m_f1 << endmsg;
233  }
234 
235  r = p_fileMgr->close( fd_2, name() );
236  if ( r != 0 ) {
237  error() << "unable to close " << m_f2 << " with FD " << fd_2 << endmsg;
238  } else {
239  info() << "closed " << m_f2 << endmsg;
240  }
241 
242  r = p_fileMgr->close( fd_3, name() );
243  if ( r != 0 ) {
244  error() << "unable to close " << m_f3 << " with FD " << fd_3 << endmsg;
245  } else {
246  info() << "closed " << m_f3 << endmsg;
247  }
248 
249  r = p_fileMgr->close( fd_4, name() );
250  if ( r != 0 ) {
251  error() << "unable to close " << m_f1 << " with FD " << fd_4 << endmsg;
252  } else {
253  info() << "closed " << m_f1 << endmsg;
254  }
255 
256  r = p_fileMgr->close( fp_r1, name() );
257  if ( r != 0 ) {
258  error() << "unable to close " << m_fr1 << " with ptr " << fp_r1 << endmsg;
259  } else {
260  info() << "closed " << m_fr1 << endmsg;
261  }
262 
263  r = p_fileMgr->close( fp_r2, name() );
264  if ( r != 0 ) {
265  error() << "unable to close " << m_fr2 << " with ptr " << fp_r2 << endmsg;
266  } else {
267  info() << "closed " << m_fr2 << endmsg;
268  }
269 
270  // r = p_fileMgr->close(fp_r3,name());
271  // if (r != 0) {
272  // error() << "unable to close " << m_fr3 << " with ptr " << fp_r3
273  // << endmsg;
274  // } else {
275  // info() << "closed " << m_fr3 << endmsg;
276  // }
277 
278  return StatusCode::SUCCESS;
279 }
280 
281 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
282 
284 
285  info() << "PosixOpenAction called by " << c << " for tech " << fa->tech() << " on " << fa << endmsg;
286 
287  // if (fa.tech() != Io::POSIX) {
288 
289  // // error() << "PosixOpenAction called for incorrect tech: "
290  // // << fa.tech() << " on " << fa
291  // // << endmsg;
292 
293  // return StatusCode::SUCCESS;
294  // }
295 
296  // info() << "PosixOpenAction for " << fa
297  // << endmsg;
298 
299  return StatusCode::SUCCESS;
300 }
301 
302 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
303 
305 
306  info() << "AllCloseAction called by " << c << " for tech " << fa->tech() << " on " << fa << endmsg;
307 
308  return StatusCode::SUCCESS;
309 }
IFileMgr::getFiles
virtual int getFiles(std::vector< std::string > &FILES, bool onlyOpen=true) const =0
FileMgrTest::fp_2
FILE * fp_2
Definition: FileMgrTest.h:39
Io::OPEN
@ OPEN
Definition: IFileMgr.h:278
FileMgrTest::fp_4
FILE * fp_4
Definition: FileMgrTest.h:39
Io::CLOSE
@ CLOSE
Definition: IFileMgr.h:278
FileMgrTest::finalize
StatusCode finalize() override
Definition: FileMgrTest.cpp:203
std::bind
T bind(T... args)
FileMgrTest::fd_4
Io::Fd fd_4
Definition: FileMgrTest.h:38
std::string
STL class.
FileMgrTest::fp_r1
TFile * fp_r1
Definition: FileMgrTest.h:40
Gaudi.Configuration.log
log
Definition: Configuration.py:29
Io::FileAttr::tech
IoTech tech() const
Definition: IFileMgr.h:188
FileMgrTest::fd_1
Io::Fd fd_1
Definition: FileMgrTest.h:38
FileMgrTest::m_f3
std::string m_f3
Definition: FileMgrTest.h:41
Gaudi::Algorithm::name
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:528
FileMgrTest
an algorithm to test the FileMgr
Definition: FileMgrTest.h:28
gaudirun.fd
fd
Definition: gaudirun.py:627
std::vector< std::string >
ISvcLocator
Definition: ISvcLocator.h:46
Algorithm
Alias for backward compatibility.
Definition: Algorithm.h:58
Io::READ
@ READ
Definition: IFileMgr.h:37
Io::WRITE
@ WRITE
Definition: IFileMgr.h:38
gaudirun.c
c
Definition: gaudirun.py:525
IFileMgr.h
std::function
FileMgrTest::fp_3
FILE * fp_3
Definition: FileMgrTest.h:39
FileMgrTest::execute
StatusCode execute() override
Definition: FileMgrTest.cpp:178
FileMgrTest::m_fr1
std::string m_fr1
Definition: FileMgrTest.h:41
StatusCode
Definition: StatusCode.h:65
IFileMgr::regAction
virtual StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &d="")=0
Io::ROOT
@ ROOT
Definition: IFileMgr.h:156
ProduceConsume.j
j
Definition: ProduceConsume.py:101
std::ofstream
STL class.
FileMgrTest::fp_r2
TFile * fp_r2
Definition: FileMgrTest.h:40
FileMgrTest::initialize
StatusCode initialize() override
Definition: FileMgrTest.cpp:35
FileMgrTest::fp_1
FILE * fp_1
Definition: FileMgrTest.h:39
GaudiPartProp.tests.v2
v2
Definition: tests.py:59
Io::FileAttr
Definition: IFileMgr.h:171
Io::EXCL
@ EXCL
Definition: IFileMgr.h:42
FileMgrTest::allCloseAction
StatusCode allCloseAction(FILEMGR_CALLBACK_ARGS)
Definition: FileMgrTest.cpp:304
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
Io::Fd
int Fd
Definition: IFileMgr.h:169
FileMgrTest::fd_2
Io::Fd fd_2
Definition: FileMgrTest.h:38
IFileMgr::fname
virtual const std::string & fname(const Io::Fd &) const =0
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
FileMgrTest::m_fr3
std::string m_fr3
Definition: FileMgrTest.h:41
FileMgrTest::m_f1
std::string m_f1
Definition: FileMgrTest.h:41
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:76
std::endl
T endl(T... args)
FileMgrTest::PosixOpenAction
StatusCode PosixOpenAction(FILEMGR_CALLBACK_ARGS)
Definition: FileMgrTest.cpp:283
std
STL namespace.
DECLARE_COMPONENT
#define DECLARE_COMPONENT(type)
Definition: PluginServiceV1.h:46
Gaudi::Algorithm::service
StatusCode service(std::string_view name, T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn't already exist.
Definition: Algorithm.h:205
FileMgrTest::p_fileMgr
IFileMgr * p_fileMgr
Definition: FileMgrTest.h:37
FileMgrTest::m_f4
std::string m_f4
Definition: FileMgrTest.h:41
FileMgrTest::fd_3
Io::Fd fd_3
Definition: FileMgrTest.h:38
Io::OPEN_ERR
@ OPEN_ERR
Definition: IFileMgr.h:278
Properties.v
v
Definition: Properties.py:122
Io::POSIX
@ POSIX
Definition: IFileMgr.h:156
IFileMgr::close
virtual Io::close_t close(const Io::Fd, const std::string &caller)=0
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
ISvcLocator.h
FileMgrTest.h
IFileMgr::open
virtual Io::open_t open(const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &, void *&, const std::string &desc, const bool shared=false)=0
FileMgrTest::m_fr2
std::string m_fr2
Definition: FileMgrTest.h:41
FileMgrTest::fp_r3
TFile * fp_r3
Definition: FileMgrTest.h:40
Io::APPEND
@ APPEND
Definition: IFileMgr.h:45
MsgStream.h
FileMgrTest::m_f2
std::string m_f2
Definition: FileMgrTest.h:41
IFileMgr::fptr
virtual void * fptr(const std::string &) const =0
PrepareBase.out
out
Definition: PrepareBase.py:20
Io::CREATE
@ CREATE
Definition: IFileMgr.h:41