manawyrm has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-e1d/+/27715 )


Change subject: RIFO: add more thorough tests and a vetted test.ok file
......................................................................

RIFO: add more thorough tests and a vetted test.ok file

This commit adds 2 new tests:
 - too old frames (which should get dropped)
 - already correct frames (which shouldn't be touched)

In addition, every test will now be run twice.
Once at frame number 0 and once very close to the wrap-around of
the internal frame counter in order to observe the behaviour.

Change-Id: I930b4361924b2e8bcb566eb7ee64f36e06bc7745
---
M tests/rifo/rifo_test.c
A tests/rifo/rifo_test.ok
2 files changed, 284 insertions(+), 10 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-e1d refs/changes/15/27715/1

diff --git a/tests/rifo/rifo_test.c b/tests/rifo/rifo_test.c
index c656c97..5dac5ba 100644
--- a/tests/rifo/rifo_test.c
+++ b/tests/rifo/rifo_test.c
@@ -9,11 +9,11 @@
 #include "frame_rifo.h"

 static void *g_e1d_ctx;
+static uint32_t init_next_out_fn;

 static void rifo_in(struct frame_rifo *rifo, uint8_t *frame, uint32_t fn)
 {
-       printf("RIFO_IN(%s, %u)\n", osmo_hexdump_nospc(frame, BYTES_PER_FRAME), 
fn);
-       OSMO_ASSERT(frame_rifo_in(rifo, frame, fn) == 0);
+       printf("RIFO_IN(%s, %u)=%d\n", osmo_hexdump_nospc(frame, 
BYTES_PER_FRAME), fn, frame_rifo_in(rifo, frame, fn));
 }

 static int rifo_out(struct frame_rifo *rifo, uint8_t *out)
@@ -23,18 +23,21 @@
        return rc;
 }

-
-static void missing_frames(void)
+static void missing_frames(uint8_t modulo)
 {
        struct frame_rifo rifo;
        frame_rifo_init(&rifo);
+       rifo.next_out_fn = init_next_out_fn;

-       printf("\nTEST: %s\n", __func__);
+       printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);

        for (int i = 0; i < 10; i++) {
                uint8_t frame[32];
                memset(frame, i, sizeof(frame));
-               rifo_in(&rifo, frame, 2*i);
+
+               if (i % 2 == modulo) {
+                       rifo_in(&rifo, frame, init_next_out_fn + i);
+               }
        }

        for (int i = 0; i < 10; i++) {
@@ -48,14 +51,15 @@
 {
        struct frame_rifo rifo;
        frame_rifo_init(&rifo);
+       rifo.next_out_fn = init_next_out_fn;

-       printf("\nTEST: %s\n", __func__);
+       printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);

        const uint8_t in[] = { 0, 1, 4, 3, 5, 2, 6, 7, 8, 9 };
        for (int i = 0; i < sizeof(in); i++) {
                uint8_t frame[32];
                memset(frame, in[i], sizeof(frame));
-               rifo_in(&rifo, frame, in[i]);
+               rifo_in(&rifo, frame, init_next_out_fn + in[i]);
        }

        for (int i = 0; i < 10; i++) {
@@ -65,12 +69,82 @@
        }
 }

+static void correct_order(void)
+{
+       struct frame_rifo rifo;
+       frame_rifo_init(&rifo);
+       rifo.next_out_fn = init_next_out_fn;
+
+       printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
+
+       const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+       for (int i = 0; i < sizeof(in); i++) {
+               uint8_t frame[32];
+               memset(frame, in[i], sizeof(frame));
+               rifo_in(&rifo, frame, init_next_out_fn + in[i]);
+       }
+
+       for (int i = 0; i < 10; i++) {
+               uint8_t frame[32];
+               memset(frame, 0xff, sizeof(frame));
+               rifo_out(&rifo, frame);
+       }
+}
+
+static void too_old_frames(void)
+{
+       struct frame_rifo rifo;
+       frame_rifo_init(&rifo);
+       rifo.next_out_fn = init_next_out_fn;
+
+       printf("\nTEST: %s, starting at FN: %u\n", __func__, init_next_out_fn);
+
+       // Put 10 frames at absolute frame numbers 850-860
+       // (to get outside of the 800 frame buffer)
+       const uint8_t in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+       for (int i = 0; i < sizeof(in); i++) {
+               uint8_t frame[32];
+               memset(frame, in[i], sizeof(frame));
+               rifo_in(&rifo, frame, init_next_out_fn + in[i] + 850);
+       }
+
+       // Skip the first 850 frames
+       for (int i = 0; i < 850; i++) {
+               uint8_t frame[32];
+               memset(frame, 0xff, sizeof(frame));
+               // Note: frame_rifo_out instead of rifo_out
+               // (just to ignore the output)
+               frame_rifo_out(&rifo, frame);
+       }
+
+       // Try to read the 10 real frames (which shouldn't be in the buffer)
+       for (int i = 0; i < 10; i++) {
+               uint8_t frame[32];
+               memset(frame, 0xff, sizeof(frame));
+               rifo_out(&rifo, frame);
+       }
+}
+
+void run_all_tests(void)
+{
+       missing_frames(0);
+       missing_frames(1);
+       reordered_in();
+       correct_order();
+       too_old_frames();
+}

 int main(int argc, char **argv)
 {
        g_e1d_ctx = talloc_named_const(NULL, 0, "osmo-e1d");
        osmo_init_logging2(g_e1d_ctx, &log_info);
-       missing_frames();
-       reordered_in();
+
+       // run all tests starting with a framenumber of 0
+       init_next_out_fn = 0;
+       run_all_tests();
+
+       // re-run all tests at the edge of a framenumber rollover
+       init_next_out_fn = 0xFFFFFFFF - 5;
+       run_all_tests();

 }
diff --git a/tests/rifo/rifo_test.ok b/tests/rifo/rifo_test.ok
new file mode 100644
index 0000000..cf1b778
--- /dev/null
+++ b/tests/rifo/rifo_test.ok
@@ -0,0 +1,200 @@
+
+TEST: missing_frames, starting at FN: 0
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+
+TEST: missing_frames, starting at FN: 0
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: reordered_in, starting at FN: 0
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: correct_order, starting at FN: 0
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 0)=0
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 1)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 2)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 3)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 4)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 5)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 6)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 7)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 8)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 9)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: too_old_frames, starting at FN: 0
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 
850)=-34
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 
851)=-34
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 
852)=-34
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 
853)=-34
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 
854)=-34
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 
855)=-34
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 
856)=-34
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 
857)=-34
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 
858)=-34
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 
859)=-34
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+
+TEST: missing_frames, starting at FN: 4294967290
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 
4294967290)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 
4294967292)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 
4294967294)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+
+TEST: missing_frames, starting at FN: 4294967290
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 
4294967291)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 
4294967293)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 
4294967295)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: reordered_in, starting at FN: 4294967290
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 
4294967290)=0
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 
4294967291)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 
4294967294)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 
4294967293)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 
4294967295)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 
4294967292)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: correct_order, starting at FN: 4294967290
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 
4294967290)=0
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 
4294967291)=0
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 
4294967292)=0
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 
4294967293)=0
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 
4294967294)=0
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 
4294967295)=0
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 0)=0
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 1)=0
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 2)=0
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 3)=0
+RIFO_OUT(0000000000000000000000000000000000000000000000000000000000000000)=0
+RIFO_OUT(0101010101010101010101010101010101010101010101010101010101010101)=0
+RIFO_OUT(0202020202020202020202020202020202020202020202020202020202020202)=0
+RIFO_OUT(0303030303030303030303030303030303030303030303030303030303030303)=0
+RIFO_OUT(0404040404040404040404040404040404040404040404040404040404040404)=0
+RIFO_OUT(0505050505050505050505050505050505050505050505050505050505050505)=0
+RIFO_OUT(0606060606060606060606060606060606060606060606060606060606060606)=0
+RIFO_OUT(0707070707070707070707070707070707070707070707070707070707070707)=0
+RIFO_OUT(0808080808080808080808080808080808080808080808080808080808080808)=0
+RIFO_OUT(0909090909090909090909090909090909090909090909090909090909090909)=0
+
+TEST: too_old_frames, starting at FN: 4294967290
+RIFO_IN(0000000000000000000000000000000000000000000000000000000000000000, 
844)=-34
+RIFO_IN(0101010101010101010101010101010101010101010101010101010101010101, 
845)=-34
+RIFO_IN(0202020202020202020202020202020202020202020202020202020202020202, 
846)=-34
+RIFO_IN(0303030303030303030303030303030303030303030303030303030303030303, 
847)=-34
+RIFO_IN(0404040404040404040404040404040404040404040404040404040404040404, 
848)=-34
+RIFO_IN(0505050505050505050505050505050505050505050505050505050505050505, 
849)=-34
+RIFO_IN(0606060606060606060606060606060606060606060606060606060606060606, 
850)=-34
+RIFO_IN(0707070707070707070707070707070707070707070707070707070707070707, 
851)=-34
+RIFO_IN(0808080808080808080808080808080808080808080808080808080808080808, 
852)=-34
+RIFO_IN(0909090909090909090909090909090909090909090909090909090909090909, 
853)=-34
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1
+RIFO_OUT(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)=-1

--
To view, visit https://gerrit.osmocom.org/c/osmo-e1d/+/27715
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-e1d
Gerrit-Branch: master
Gerrit-Change-Id: I930b4361924b2e8bcb566eb7ee64f36e06bc7745
Gerrit-Change-Number: 27715
Gerrit-PatchSet: 1
Gerrit-Owner: manawyrm <[email protected]>
Gerrit-MessageType: newchange

Reply via email to