xref: /aosp_15_r20/external/flatbuffers/grpc/tests/grpctest.py (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Workerfrom __future__ import print_function
2*890232f2SAndroid Build Coastguard Worker
3*890232f2SAndroid Build Coastguard Workerimport os
4*890232f2SAndroid Build Coastguard Workerimport sys
5*890232f2SAndroid Build Coastguard Workerimport grpc
6*890232f2SAndroid Build Coastguard Workerimport flatbuffers
7*890232f2SAndroid Build Coastguard Worker
8*890232f2SAndroid Build Coastguard Workerfrom concurrent import futures
9*890232f2SAndroid Build Coastguard Worker
10*890232f2SAndroid Build Coastguard Workersys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'tests'))
11*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Monster as Monster
12*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Stat as Stat
13*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Vec3 as Vec3
14*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.Test as Test
15*890232f2SAndroid Build Coastguard Workerimport MyGame.Example.monster_test_grpc_fb as monster_grpc_fb
16*890232f2SAndroid Build Coastguard Worker
17*890232f2SAndroid Build Coastguard Worker
18*890232f2SAndroid Build Coastguard Workertest_stat_id = "test_stat_id"
19*890232f2SAndroid Build Coastguard Workertest_stat_val = 8
20*890232f2SAndroid Build Coastguard Workertest_stat_count = 1
21*890232f2SAndroid Build Coastguard Worker
22*890232f2SAndroid Build Coastguard Workertest_monster_name1 = "test_monster_name1"
23*890232f2SAndroid Build Coastguard Workertest_monster_name2 = "test_monster_name2"
24*890232f2SAndroid Build Coastguard Workertest_string = "test_string"
25*890232f2SAndroid Build Coastguard Workertest_color = 2
26*890232f2SAndroid Build Coastguard Workertest_X = 3.0
27*890232f2SAndroid Build Coastguard Workertest_Y = 2.0
28*890232f2SAndroid Build Coastguard Workertest_Z = 6.0
29*890232f2SAndroid Build Coastguard Workertest_test1 = 4.0
30*890232f2SAndroid Build Coastguard Workertest_a = 8
31*890232f2SAndroid Build Coastguard Workertest_b = 5
32*890232f2SAndroid Build Coastguard Workertest_hp = 67
33*890232f2SAndroid Build Coastguard Workertest_inventory = [1, 1, 2, 3, 5, 8]
34*890232f2SAndroid Build Coastguard Workertest_testtype = 4
35*890232f2SAndroid Build Coastguard Worker
36*890232f2SAndroid Build Coastguard Workertest_monsters_name_retrieve = ["big_monster", "small_monster"]
37*890232f2SAndroid Build Coastguard Workertest_no_of_monsters = 2
38*890232f2SAndroid Build Coastguard Worker
39*890232f2SAndroid Build Coastguard Worker
40*890232f2SAndroid Build Coastguard Workerclass MonsterStorage(monster_grpc_fb.MonsterStorageServicer):
41*890232f2SAndroid Build Coastguard Worker
42*890232f2SAndroid Build Coastguard Worker    def Store(self, request, context):
43*890232f2SAndroid Build Coastguard Worker
44*890232f2SAndroid Build Coastguard Worker        m = Monster.Monster().GetRootAsMonster(request, 0)
45*890232f2SAndroid Build Coastguard Worker
46*890232f2SAndroid Build Coastguard Worker        assert m.Name().decode("utf-8") == test_monster_name1
47*890232f2SAndroid Build Coastguard Worker
48*890232f2SAndroid Build Coastguard Worker        assert m.Pos().X() == test_X
49*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Y() == test_Y
50*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Z() == test_Z
51*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Test1() == test_test1
52*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Test2() == test_color
53*890232f2SAndroid Build Coastguard Worker        test3 = Test.Test()
54*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Test3(test3).A() == test_a
55*890232f2SAndroid Build Coastguard Worker        assert m.Pos().Test3(test3).B() == test_b
56*890232f2SAndroid Build Coastguard Worker
57*890232f2SAndroid Build Coastguard Worker        assert m.Hp() == test_hp
58*890232f2SAndroid Build Coastguard Worker
59*890232f2SAndroid Build Coastguard Worker        assert m.Color() == test_color
60*890232f2SAndroid Build Coastguard Worker
61*890232f2SAndroid Build Coastguard Worker        assert m.InventoryLength() == len(test_inventory)
62*890232f2SAndroid Build Coastguard Worker        for i in range(0, len(test_inventory)):
63*890232f2SAndroid Build Coastguard Worker            assert m.Inventory(i) == test_inventory[len(test_inventory)-i -1]
64*890232f2SAndroid Build Coastguard Worker
65*890232f2SAndroid Build Coastguard Worker        assert m.TestType() == test_testtype
66*890232f2SAndroid Build Coastguard Worker
67*890232f2SAndroid Build Coastguard Worker        assert m.Test() is not None
68*890232f2SAndroid Build Coastguard Worker        table = m.Test()
69*890232f2SAndroid Build Coastguard Worker
70*890232f2SAndroid Build Coastguard Worker        m2 = Monster.Monster()
71*890232f2SAndroid Build Coastguard Worker        m2.Init(table.Bytes, table.Pos)
72*890232f2SAndroid Build Coastguard Worker        assert m2.Name().decode("utf-8") == test_monster_name2
73*890232f2SAndroid Build Coastguard Worker
74*890232f2SAndroid Build Coastguard Worker        m3 = m.Enemy()
75*890232f2SAndroid Build Coastguard Worker        assert m3.Name().decode("utf-8") == test_monster_name2
76*890232f2SAndroid Build Coastguard Worker
77*890232f2SAndroid Build Coastguard Worker        assert m.Testarrayofstring(0).decode("utf-8") == test_string
78*890232f2SAndroid Build Coastguard Worker
79*890232f2SAndroid Build Coastguard Worker        b = flatbuffers.Builder(0)
80*890232f2SAndroid Build Coastguard Worker        i = b.CreateString(test_stat_id)
81*890232f2SAndroid Build Coastguard Worker        Stat.StatStart(b)
82*890232f2SAndroid Build Coastguard Worker        Stat.StatAddId(b, i)
83*890232f2SAndroid Build Coastguard Worker        Stat.StatAddVal(b, test_stat_val)
84*890232f2SAndroid Build Coastguard Worker        Stat.StatAddCount(b, test_stat_count)
85*890232f2SAndroid Build Coastguard Worker        b.Finish(Stat.StatEnd(b))
86*890232f2SAndroid Build Coastguard Worker        return bytes(b.Output())
87*890232f2SAndroid Build Coastguard Worker
88*890232f2SAndroid Build Coastguard Worker    def Retrieve(self, request, context):
89*890232f2SAndroid Build Coastguard Worker
90*890232f2SAndroid Build Coastguard Worker        s = Stat.Stat().GetRootAsStat(request, 0)
91*890232f2SAndroid Build Coastguard Worker
92*890232f2SAndroid Build Coastguard Worker        no_of_monsters = test_no_of_monsters
93*890232f2SAndroid Build Coastguard Worker        for i in range(0, no_of_monsters):
94*890232f2SAndroid Build Coastguard Worker            b = flatbuffers.Builder(0)
95*890232f2SAndroid Build Coastguard Worker            i = b.CreateString(test_monsters_name_retrieve[i])
96*890232f2SAndroid Build Coastguard Worker            Monster.MonsterStart(b)
97*890232f2SAndroid Build Coastguard Worker            Monster.MonsterAddName(b, i)
98*890232f2SAndroid Build Coastguard Worker            b.Finish(Monster.MonsterEnd(b))
99*890232f2SAndroid Build Coastguard Worker            yield bytes(b.Output())
100*890232f2SAndroid Build Coastguard Worker
101*890232f2SAndroid Build Coastguard Worker
102*890232f2SAndroid Build Coastguard Workerdef serve():
103*890232f2SAndroid Build Coastguard Worker
104*890232f2SAndroid Build Coastguard Worker    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
105*890232f2SAndroid Build Coastguard Worker    monster_grpc_fb.add_MonsterStorageServicer_to_server(MonsterStorage(), server)
106*890232f2SAndroid Build Coastguard Worker    server.add_insecure_port('[::]:50051')
107*890232f2SAndroid Build Coastguard Worker
108*890232f2SAndroid Build Coastguard Worker    server.start()
109*890232f2SAndroid Build Coastguard Worker
110*890232f2SAndroid Build Coastguard Worker    run()
111*890232f2SAndroid Build Coastguard Worker
112*890232f2SAndroid Build Coastguard Worker
113*890232f2SAndroid Build Coastguard Workerdef run():
114*890232f2SAndroid Build Coastguard Worker
115*890232f2SAndroid Build Coastguard Worker    channel = grpc.insecure_channel('127.0.0.1:50051')
116*890232f2SAndroid Build Coastguard Worker    stub = monster_grpc_fb.MonsterStorageStub(channel)
117*890232f2SAndroid Build Coastguard Worker
118*890232f2SAndroid Build Coastguard Worker    b = flatbuffers.Builder(0)
119*890232f2SAndroid Build Coastguard Worker    name2 = b.CreateString(test_monster_name2)
120*890232f2SAndroid Build Coastguard Worker    name1 = b.CreateString(test_monster_name1)
121*890232f2SAndroid Build Coastguard Worker    Monster.MonsterStart(b)
122*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddName(b, name2)
123*890232f2SAndroid Build Coastguard Worker    monster2 = Monster.MonsterEnd(b)
124*890232f2SAndroid Build Coastguard Worker    test1 = b.CreateString(test_string)
125*890232f2SAndroid Build Coastguard Worker
126*890232f2SAndroid Build Coastguard Worker    Monster.MonsterStartInventoryVector(b, len(test_inventory))
127*890232f2SAndroid Build Coastguard Worker    for i in range(0, len(test_inventory)):
128*890232f2SAndroid Build Coastguard Worker        b.PrependByte(test_inventory[i])
129*890232f2SAndroid Build Coastguard Worker    inv = b.EndVector()
130*890232f2SAndroid Build Coastguard Worker
131*890232f2SAndroid Build Coastguard Worker    Monster.MonsterStartTest4Vector(b, 2)
132*890232f2SAndroid Build Coastguard Worker    Test.CreateTest(b, 10, 20)
133*890232f2SAndroid Build Coastguard Worker    Test.CreateTest(b, 30, 40)
134*890232f2SAndroid Build Coastguard Worker    test4 = b.EndVector()
135*890232f2SAndroid Build Coastguard Worker
136*890232f2SAndroid Build Coastguard Worker    Monster.MonsterStartTestarrayofstringVector(b, 1)
137*890232f2SAndroid Build Coastguard Worker    b.PrependUOffsetTRelative(test1)
138*890232f2SAndroid Build Coastguard Worker    test_array_of_string = b.EndVector()
139*890232f2SAndroid Build Coastguard Worker
140*890232f2SAndroid Build Coastguard Worker    Monster.MonsterStart(b)
141*890232f2SAndroid Build Coastguard Worker
142*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddHp(b, test_hp)
143*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddName(b, name1)
144*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddColor(b, test_color)
145*890232f2SAndroid Build Coastguard Worker    pos = Vec3.CreateVec3(b, test_X, test_Y, test_Z, test_test1, test_color, test_a, test_b)
146*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddPos(b, pos)
147*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddInventory(b, inv)
148*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddTestType(b, test_testtype)
149*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddTest(b, monster2)
150*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddTest4(b, test4)
151*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddEnemy(b, monster2)
152*890232f2SAndroid Build Coastguard Worker    Monster.MonsterAddTestarrayofstring(b, test_array_of_string)
153*890232f2SAndroid Build Coastguard Worker    monster = Monster.MonsterEnd(b)
154*890232f2SAndroid Build Coastguard Worker
155*890232f2SAndroid Build Coastguard Worker    b.Finish(monster)
156*890232f2SAndroid Build Coastguard Worker
157*890232f2SAndroid Build Coastguard Worker    stat_response = stub.Store(bytes(b.Output()))
158*890232f2SAndroid Build Coastguard Worker
159*890232f2SAndroid Build Coastguard Worker    s = Stat.Stat().GetRootAsStat(stat_response, 0)
160*890232f2SAndroid Build Coastguard Worker
161*890232f2SAndroid Build Coastguard Worker    assert s.Id().decode("utf-8") == test_stat_id
162*890232f2SAndroid Build Coastguard Worker    assert s.Val() == test_stat_val
163*890232f2SAndroid Build Coastguard Worker    assert s.Count() == test_stat_count
164*890232f2SAndroid Build Coastguard Worker
165*890232f2SAndroid Build Coastguard Worker    monster_reponses = stub.Retrieve(stat_response)
166*890232f2SAndroid Build Coastguard Worker    count = 0
167*890232f2SAndroid Build Coastguard Worker    for monster_reponse in monster_reponses:
168*890232f2SAndroid Build Coastguard Worker        m = Monster.Monster().GetRootAsMonster(monster_reponse, 0)
169*890232f2SAndroid Build Coastguard Worker        assert m.Name().decode("utf-8") == test_monsters_name_retrieve[count]
170*890232f2SAndroid Build Coastguard Worker        count = count + 1
171*890232f2SAndroid Build Coastguard Worker
172*890232f2SAndroid Build Coastguard Worker
173*890232f2SAndroid Build Coastguard Workerif __name__ == '__main__':
174*890232f2SAndroid Build Coastguard Worker    serve()
175