Echtzeitsysteme / Echtzeitsysteme/gips
Inconsistent build behavior on some tests (`gips.multilayeredinheritence`)
- Dominant language
- Java
- Stars
- 7
- Forks
- 4
- Avg merge
- 5d 11h
- Merged PRs (30d)
- 10
Description
Sometimes (and I cannot find out under which circumstances), the GIPS builder creates invalid `gips-model.xmi` files for some of the tests and they fail.
- Most often, I observe it with one of these test projects:
- https://github.com/Echtzeitsysteme/gips-tests/tree/main/gips.multilayeredinheritence
- https://github.com/Echtzeitsysteme/gips-tests/tree/main/gips.multilayeredinheritencersinit
- The corresponding tests are:
- https://github.com/Echtzeitsysteme/gips-tests/blob/main/test.suite.gips/src/test/suite/gips/multilayeredinheritence/MultiLayeredInheritenceTest.java
- https://github.com/Echtzeitsysteme/gips-tests/blob/main/test.suite.gips/src/test/suite/gips/multilayeredinheritence/MultiLayeredInheritenceRSInitTest.java
Today, I investigated the issue a bit further and I found:
- When one of the tests mentioned above fails, some of the generated source files differ. (I attached a diff of one of the broken projects with a successful build below.)
- As a consequence, the generated ILP problem also differs. (This can be seen when activating the output of the LP file in the configuration.)
- As far as I can see, the respective test in a broken project build can be fixed if `gips-model.xmi` gets overwritten by the same file taken from a successful build.
**=> Something within GIPS generates non-deterministic broken `gips-model.xmi` files.**
---
Total diff:
```
diff --recursive gips.multilayeredinheritencersinit gips.multilayeredinheritencersinit_broken
diff --color --recursive gips.multilayeredinheritencersinit/bin/gips/multilayeredinheritencersinit/api/gips/gips-model.xmi gips.multilayeredinheritencersinit_broken/bin/gips/multilayeredinheritencersinit/api/gips/gips-model.xmi
4,5c4,5
<
<
---
>
>
10,11c10,11
<
<
---
>
>
13c13
<
---
>
28c28
<
---
>
33c33
<
---
>
89c89
<
---
>
104c104
<
---
>
109c109
<
---
>
Binary files gips.multilayeredinheritencersinit/bin/gips/multilayeredinheritencersinit/hipe/engine/actor/DispatchActor.class and gips.multilayeredinheritencersinit_broken/bin/gips/multilayeredinheritencersinit/hipe/engine/actor/DispatchActor.class differ
Binary files gips.multilayeredinheritencersinit/bin/gips/multilayeredinheritencersinit/hipe/engine/actor/NotificationActor.class and gips.multilayeredinheritencersinit_broken/bin/gips/multilayeredinheritencersinit/hipe/engine/actor/NotificationActor.class differ
diff --color --recursive gips.multilayeredinheritencersinit/src-gen/gips/multilayeredinheritencersinit/api/gips/gips-model.xmi gips.multilayeredinheritencersinit_broken/src-gen/gips/multilayeredinheritencersinit/api/gips/gips-model.xmi
4,5c4,5
<
<
---
>
>
10,11c10,11
<
<
---
>
>
13c13
<
---
>
28c28
<
---
>
33c33
<
---
>
89c89
<
---
>
104c104
<
---
>
109c109
<
---
>
diff --color --recursive gips.multilayeredinheritencersinit/src-gen/gips/multilayeredinheritencersinit/hipe/engine/actor/DispatchActor.java gips.multilayeredinheritencersinit_broken/src-gen/gips/multilayeredinheritencersinit/hipe/engine/actor/DispatchActor.java
66,75d65
< type2addConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getC(), obj -> {
< multilayeredinheritencemodel.C _c = (multilayeredinheritencemodel.C) obj;
< incUtil.newMessage();
< name2actor.get("A_object").tell(new ObjectAdded(incUtil, _c), getSelf());
< });
< type2addConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getB(), obj -> {
< multilayeredinheritencemodel.B _b = (multilayeredinheritencemodel.B) obj;
< incUtil.newMessage();
< name2actor.get("A_object").tell(new ObjectAdded(incUtil, _b), getSelf());
< });
84a75,84
> });
> type2addConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getB(), obj -> {
> multilayeredinheritencemodel.B _b = (multilayeredinheritencemodel.B) obj;
> incUtil.newMessage();
> name2actor.get("A_object").tell(new ObjectAdded(incUtil, _b), getSelf());
> });
> type2addConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getC(), obj -> {
> multilayeredinheritencemodel.C _c = (multilayeredinheritencemodel.C) obj;
> incUtil.newMessage();
> name2actor.get("A_object").tell(new ObjectAdded(incUtil, _c), getSelf());
diff --color --recursive gips.multilayeredinheritencersinit/src-gen/gips/multilayeredinheritencersinit/hipe/engine/actor/NotificationActor.java gips.multilayeredinheritencersinit_broken/src-gen/gips/multilayeredinheritencersinit/hipe/engine/actor/NotificationActor.java
21c21
< explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getC(), obj -> {
---
> explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getA(), obj -> {
25c25
< explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getB(), obj -> {
---
> explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getRoot(), obj -> {
26a27,28
> multilayeredinheritencemodel.Root _root = (multilayeredinheritencemodel.Root) obj;
> children.addAll(_root.getObjects());
29c31
< explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getA(), obj -> {
---
> explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getB(), obj -> {
33c35
< explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getRoot(), obj -> {
---
> explorationConsumer.put(multilayeredinheritencemodel.MultilayeredinheritencemodelPackage.eINSTANCE.getC(), obj -> {
35,36d36
< multilayeredinheritencemodel.Root _root = (multilayeredinheritencemodel.Root) obj;
< children.addAll(_root.getObjects());
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.