Commit Graph

231 Commits

Author SHA1 Message Date
Jake Hillion
5c3bb261c8 integration: add GLOB with CONFIGURE_DEPENDS to pick up files 2023-06-29 15:47:06 +01:00
Alastair Robertson
24d707cf56 Flattener: Flatten class template parameters 2023-06-29 11:58:39 +01:00
Alastair Robertson
04715e2015 TypeGraph: Create dummy containers
These represent types which don't store any interesting data for us to
measure, but which are required by a real container so can not be
replaced with our own generated class types.

std::allocator often has bad DWARF, so it must be replaced after the
DWARF is fixed up in Flattener. The others could be replaced earlier in
the transformation process if desired, but I've left them all together
for simplicity for now.

This fixes the folly::fbstring tests.
2023-06-28 16:11:50 +01:00
Alastair Robertson
4dc9007166 Integration tests: Set up CI testing for TypeGraph
CTest can't forward command line arguments to the test runner, so add
the option to using an environment variable to enable features instead.

CMake issue tracking the feature that would have been needed:
  https://gitlab.kitware.com/cmake/cmake/-/issues/20470

Tests which aren't passing yet have been disabled in CI.
2023-06-27 16:40:54 +01:00
Alastair Robertson
1bb0c62987 Flattener: Attempt to take params from parent allocator in case of bad DWARF 2023-06-27 14:06:02 +01:00
Alastair Robertson
4bfa932b9b DrgnParser: Handle enum values in template params
We want to use the fully qualified name for scoped enums to keep the C++
compiler happy. When a parameter expects an enum value, we must supply
an enum value and not its underlying integer value.

Before:
  isset_bitset<1, 0>

After:
  isset_bitset<1, apache::thrift::detail::IssetBitsetOption::Unpacked>
2023-06-26 15:13:21 +01:00
Alastair Robertson
b0ef913b19 NameGen: Handle containers with zero template params
Previously we always deleted the last two characters and appended a `>`.

Old:
  MyContaine>

New:
  MyContainer
2023-06-26 11:27:38 +01:00
Alastair Robertson
4c96b65038 Flattener: Handle classes which inherit from containers
Turn the parent container into a member so that we process it along
with any extra members that this derived class has.
2023-06-23 19:51:19 +01:00
Alastair Robertson
6dce2d1c33 Printer: Improvements for displaying large type graphs
- Don't truncate output above 30k characters
- Include enough padding at the begining of lines to account for large
  node IDs
2023-06-23 15:55:42 +01:00
Alastair Robertson
5b6a9434b7 Tests: Use shared functions from type_graph_utils 2023-06-23 15:55:42 +01:00
Alastair Robertson
02b764157d Tests: Add a CodeGen test 2023-06-23 14:23:53 +01:00
Alastair Robertson
a1537ab6aa Unit Tests: Create MockSymbolService 2023-06-23 14:23:53 +01:00
Jake Hillion
40c7a9afb7 features: clean up old flags 2023-06-23 11:25:43 +01:00
Jake Hillion
77667e5741 tests: add polymorphic class tests with no extra features 2023-06-19 19:06:04 +01:00
Alastair Robertson
62575a7c3e TypeGraph: Respect [[codegen.ignore]] config value 2023-06-05 13:38:54 +01:00
Jake Hillion
a6d7f90f50 integration_py: fix expected sizes 2023-05-31 19:00:10 +02:00
Alastair Robertson
2d28b20d46 TypeGraph: Fix multi dimensional arrays
Multi dimensional arrays are not flattened into 1-D arrays when using
TypeGraph. Update TreeBuilder to account for this.

By not flattening arrays, we are able to produce more descriptive
results.

The disadvantage is that we must now recurse inside arrays
containing only primitives. A better solution to requiring flattening
would be the planned work to not recurse into any static types (not just
primitives). This would also apply to multi-dimensional arrays of
primtivies.
2023-05-31 16:53:38 +01:00
Alastair Robertson
784b900218 TypeGraph: Replace allocators with DummyAllocator
When we were previously removing allocators, we were only able to work
with containers whose allocators appeared as their last template
parameter.

Now we can replace allocators in the middle of a parameter list.

This fixes tests for folly::sorted_vector_set.
2023-05-31 15:49:37 +01:00
Alastair Robertson
e1bc5c7b5e Tests: Split common code out into type_graph_utils 2023-05-31 15:49:37 +01:00
Alastair Robertson
3a7a647a73 TypeGraph: Apply qualifiers to template params
This is necessary when replacing the allocator of a map type, for
example.

`std::map<int, int>` will need an allocator which allocates elements of
type `std::pair<const int, int>>`
2023-05-31 15:49:37 +01:00
Alastair Robertson
cfc3cc0221 TypeGraph: Handle alias templates
This fixes the test failure for std::conditional_t
2023-05-30 17:59:42 +01:00
Alastair Robertson
3d91603c8e TypeGraph: Fix std::string container
std::basic_string takes three template parameters:
1. CharT
2. Traits
3. Allocator

The Traits parameter was causing issues, as it requires a type which
exposes certain things, e.g. `Traits::value_type`.

We have a few options to resolve this:
1. Remove this parameter, as we do for allocators
    Cons: removing a template parameter doesn't work if other
    parameters appear after it

2. Stub this parameter, as we do for hashers/comparators
    Cons: we need to hardcode an implementation that satisfies the
    `Traits::value_type` requirements

3. Leave the parameter as-is
    Cons: will not work if a non-standard Traits is used

    By using the real implementation of this Traits parameter
    (normally `std::char_traits<CharT>`), we get one that we know will
    work as long as it is defined in a stdlib header.

Option 3 is what we use in this patch. Instead of adding more
configuration options to the container TOML file format (e.g.
`params_to_keep = [1]`), we add `std::char_traits` as a dummy
container type. Now, whenever `std::char_traits` appears, it will be
left as-is, i.e. not removed, replaced or reverse-engineered.

This is the same approach previously used for Thrift's isset_bitset.
2023-05-30 17:17:29 +01:00
Alastair Robertson
e01b3fd327 TypeGraph: Add new CodeGen
This code mostly works, but is obviously not complete. This commit just
adds the code and tests, but does not enable it in OID or OIL.
2023-05-30 16:40:47 +01:00
Jake Hillion
008e519cd7 tomlplusplus: compile header once 2023-05-30 16:43:10 +02:00
Alastair Robertson
bd919ae4e4 TypeGraph: Add core code
This code mostly works, but is obviously not complete. This commit just
adds the code and tests, but does not enable it in OID or OIL.
2023-05-30 13:27:23 +01:00
Alastair Robertson
a73cab758f ContainerInfo: Move matcher regex construction to class ctor and add unit tests 2023-05-26 18:21:59 +01:00
Alastair Robertson
8a19246c81 Integration tests: Add alignment tests 2023-05-24 15:42:26 +01:00
Alastair Robertson
cd836bad62 Integration tests: Assume dynamicSize of 0 in OIL tests if it is not set
This just makes it a little easier to write tests for purely static
types.
2023-05-24 15:42:26 +01:00
Alastair Robertson
280f663eb5 Only pass "-no-pie" to the linker
This fixes an "argument unused during compilation" warning from Clang
2023-05-23 10:36:42 +01:00
Alastair Robertson
60e87735c8 Disable PCH 2023-05-23 10:36:42 +01:00
Alastair Robertson
dbf6dbc71c Fix warnings in test code 2023-05-23 10:36:42 +01:00
Alastair Robertson
d71a497df5 Fix compiler warnings in folly_shims.cpp 2023-05-23 10:36:42 +01:00
Alastair Robertson
66a171eedc Integration test README: Document "skip" and "oil_disable" 2023-05-18 15:04:22 +01:00
Alastair Robertson
939256030c Integration test: Add "target_function" option 2023-05-18 14:34:08 +01:00
Jon Haslam
d4891e98d4
move src directory to oi (#134) 2023-04-26 16:20:53 +01:00
Jake Hillion
4a64fc5c9c clang-format: set BinPackParameters=false 2023-04-24 11:28:22 +02:00
Jake Hillion
789fb7ef6e add feature addition to the integration test runner 2023-04-21 19:02:44 +02:00
Jake Hillion
641a128b39 add command line feature addition/removal 2023-04-21 19:02:44 +02:00
Alastair Robertson
9755688d1c Add folly shims to avoid linking against folly
This fixes linker errors in debug builds.

When building in debug mode (-DCMAKE_BUILD_TYPE=Debug), folly requires
the function "safe_assert_terminate" to be defined. To avoid building
and linking against folly, we define our own no-op version of this
function.
2023-04-21 12:56:54 +01:00
Jake Hillion
cd2fa8c9ef remove treebuilder pointer validation 2023-04-18 16:04:47 +02:00
Jake Hillion
28025fa416 integration.py: pass missing --config-file to test oid 2023-04-18 16:04:47 +02:00
Jake Hillion
f47628ae2d add test for folly::fbstring 2023-04-06 15:11:09 +01:00
Alastair Robertson
10f47510d1 Integration tests: Remove typedefs from cycles.toml
uint64_t is a typedef. int is a primitive.

The cycles tests are going to be re-used to underpin some type-graph
unit tests. The patch removes unnecessary typedefs and makes the unit
tests simpler.
2023-04-03 13:02:03 +01:00
Jay Kamat
e27f725a85 Avoid following weak_ptrs
Previously, we treated weak_ptrs as normal types and we recursed
within them, following the internal data pointer and possibly causing
crashes. We really shouldn't be following them, so I added a custom
type to simply abort processing. If we want to handle them (ie: check
if they are valid, and follow them if so), that should be fairly easy
with the work there is here so far.
2023-03-28 14:10:27 -07:00
Alastair Robertson
fb58ccebac Integration tests: Have target process print its pid
This makes it easier to work with when running multiple instances of it
manually, outside of the integration testing framework.
2023-03-28 16:42:14 +01:00
Alastair Robertson
bab21166f2 Integration tests: Remove redundant "array" from std_array.toml test names 2023-03-28 16:42:14 +01:00
Jake Hillion
675211aff5 tests: build integration.py targets with cmake 2023-03-27 16:15:37 +01:00
Jake Hillion
d2caaf22e8 formatting: force pointers/references with the type 2023-03-24 20:18:18 +00:00
Alastair Robertson
512163f98e Integration tests: Pass config to OIL tests on the command line
Instead of using an environment variable, pass the path to the config
file as a command line argument. This makes it possible to directly
copy the command being run (as show with --verbose) and run it in a
debugger outside of the test framework.

Old verbose output:
  Running: /home/ajor/src/object-introspection3/build/test/integration/integration_test_target oil cycles_unique_ptr

New verbose output:
  Running: /home/ajor/src/object-introspection3/build/test/integration/integration_test_target oil cycles_unique_ptr /home/ajor/src/object-introspection3/build/testing.oid.toml
2023-03-22 16:57:35 +00:00
Alastair Robertson
56f7147d39 Integration tests: Set expected results for cycles.toml
Format the raw_ptr test case with jq to remove tabs and deleted extra
data from the JSON.
2023-03-22 13:51:04 +00:00
Jake Hillion
c4194a9fbc oil: remove fields in options 2023-03-20 16:26:10 +00:00
Jake Hillion
f10e8a7173 folly: switch to FetchContent 2023-03-20 13:25:15 +00:00
Jake Hillion
06aa3e3d40 clear all warnings and enable -Werror 2023-03-20 11:14:55 +00:00
Jon Haslam
c9bedc0f84
Fix remove mappings (#93) 2023-03-13 17:06:39 +00:00
Jay Kamat
7a3cd2d6bc Add tests for exclusive size 2023-03-10 11:46:30 -08:00
Alastair Robertson
d9b13ff101 Integration tests: Test templates 2023-03-09 11:51:41 +00:00
Alastair Robertson
5dd92b7f7f Integration tests: Test arrays 2023-03-09 11:51:41 +00:00
Alastair Robertson
9dd5c4b4cc Integration Tests: Test typedefs 2023-03-09 11:51:41 +00:00
Alastair Robertson
340a5e6803 Integration Tests: Test enums 2023-03-09 11:51:41 +00:00
Alastair Robertson
18e636d68d Integration tests: Add simple class and simple union tests 2023-03-09 11:51:41 +00:00
Jake Hillion
be273f6e0d tests: make relative config paths absolute when copying 2023-02-28 15:13:48 -08:00
Jake Hillion
3a236aa4f2 sorted_vec_set: finish changing to a container adapter 2023-02-24 10:31:59 -08:00
Jon Haslam
878b9bfebb
add std::conditional test (#79) 2023-02-22 14:37:59 -08:00
Alastair Robertson
9fd96ec3a4 integration/primitives.toml: Add char8_t test 2023-02-21 11:59:16 -08:00
Jake Hillion
9cb8fd7a97 add missing virtual destructors 2023-02-03 17:26:04 +00:00
Alastair Robertson
6f786b4348 CI: Output junit result format directly from CTest
Remove the conversion script we were previously using.
2023-02-02 11:00:58 +00:00
Jake Hillion
23026d80ba config: look up paths relative to config file 2023-02-01 14:54:33 +00:00
Jake Hillion
ee56decc10 oil: change interface to references 2023-01-31 13:30:58 +00:00
Alastair Robertson
9e72ada131 Support dynamic polymorphic inheritance
i.e. classes which contain virtual functions and use a virtual pointer
2023-01-30 13:22:09 +00:00
Alastair Robertson
ab499f6b83 Polymorphic inheritance tests 2023-01-30 13:22:09 +00:00
Alastair Robertson
949f53b456 Delete old files from test/ 2023-01-27 12:45:35 +00:00
Alastair Robertson
7c1b4c2a43 Integration test readme: Add example of how to run a single test
Also minor cleanup of gen_tests.py
2023-01-26 12:11:21 +00:00
Jon Haslam
885c2ec369
Support std::multimap with comparator template parameter (#33)
Co-authored-by: Jon Haslam <jonhaslam@meta.com>
2023-01-20 16:30:02 +00:00
Jake Hillion
bad14de1e2 add issue references to every skipped test 2023-01-04 17:56:37 +00:00
Jake Hillion
6fc24b444c enable some oil tests on function pointers 2023-01-04 17:56:37 +00:00
Jake Hillion
bd370c8ec1 enable OilIntegration.ignored_a 2023-01-04 17:56:37 +00:00
Jake Hillion
889b19f672 enable oil on top level pointer tests 2023-01-04 17:56:37 +00:00
Jake Hillion
4e07ec125c be more specific about skipped pointers_incomplete tests 2023-01-04 17:56:37 +00:00
Jake Hillion
a6c3d30014 enable void smart pointer present tests
these tests were skipped as they can't record the dynamic size. however,
there isn't a dynamic size to report as the type of the pointer is void.
accept a dynamic size of 0 as it's the best we can do with no type
knowledge.
2023-01-04 17:56:37 +00:00
Jake Hillion
358b4e9505 add oil_disable test option
The `oil_skip` test option was added for tests that don't work under OIL
but do work under OID. However, we now have two classes of `oil_skip`ped
tests: those that could be fixed, and those that will never work.
Increase clarity by not generating the tests which do not make sense at
all, leaving us with a cleaner set of skipped (and fixable) tests.
2023-01-04 17:56:37 +00:00
Jon Haslam
db90326c4b Initial commit 2022-12-19 06:37:51 -08:00