From 30bf64441df862e16032ef3465bba701074a75a4 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Thu, 25 Apr 2024 15:13:10 +0300 Subject: [PATCH] protogen: Initial implementation Signed-off-by: Evgenii Stratonikov --- Makefile | 5 +- accounting/grpc/service.go | 46 -- accounting/grpc/service.pb.go | Bin 18996 -> 0 bytes accounting/grpc/service_frostfs.pb.go | Bin 0 -> 18600 bytes accounting/grpc/service_frostfs_fuzz.go | 45 ++ accounting/grpc/service_frostfs_test.go | 31 + accounting/grpc/types.go | 11 - accounting/grpc/types.pb.go | Bin 6048 -> 0 bytes accounting/grpc/types_frostfs.pb.go | Bin 0 -> 3764 bytes accounting/grpc/types_frostfs_fuzz.go | 26 + accounting/grpc/types_frostfs_test.go | 21 + acl/convert.go | 2 +- acl/grpc/types.go | 193 ------ acl/grpc/types.pb.go | Bin 44095 -> 0 bytes acl/grpc/types_frostfs.pb.go | Bin 0 -> 43694 bytes acl/grpc/types_frostfs_fuzz.go | 64 ++ acl/grpc/types_frostfs_test.go | 41 ++ ape/grpc/types.go | 21 - ape/grpc/types.pb.go | Bin 9385 -> 0 bytes ape/grpc/types_frostfs.pb.go | Bin 0 -> 7826 bytes ape/grpc/types_frostfs_fuzz.go | 45 ++ ape/grpc/types_frostfs_test.go | 31 + apemanager/grpc/service.go | 106 --- apemanager/grpc/service.pb.go | Bin 46394 -> 0 bytes apemanager/grpc/service_frostfs.pb.go | Bin 0 -> 56051 bytes apemanager/grpc/service_frostfs_fuzz.go | 121 ++++ apemanager/grpc/service_frostfs_test.go | 71 ++ apemanager/grpc/types_frostfs.pb.go | Bin 0 -> 8069 bytes apemanager/grpc/types_frostfs_fuzz.go | 45 ++ apemanager/grpc/types_frostfs_test.go | 31 + container/grpc/service.go | 234 ------- container/grpc/service.pb.go | Bin 79297 -> 0 bytes container/grpc/service_frostfs.pb.go | Bin 0 -> 96320 bytes container/grpc/service_frostfs_fuzz.go | 197 ++++++ container/grpc/service_frostfs_test.go | 111 ++++ container/grpc/types.go | 46 -- container/grpc/types.pb.go | Bin 13491 -> 0 bytes container/grpc/types_frostfs.pb.go | Bin 0 -> 11593 bytes container/grpc/types_frostfs_fuzz.go | 26 + container/grpc/types_frostfs_test.go | 21 + go.mod | 3 + go.sum | 6 + lock/grpc/types.go | 8 - lock/grpc/types.pb.go | Bin 5770 -> 0 bytes lock/grpc/types_frostfs.pb.go | Bin 0 -> 3844 bytes lock/grpc/types_frostfs_fuzz.go | 26 + lock/grpc/types_frostfs_test.go | 21 + netmap/grpc/service.go | 116 ---- netmap/grpc/service.pb.go | Bin 46017 -> 0 bytes netmap/grpc/service_frostfs.pb.go | Bin 0 -> 54189 bytes netmap/grpc/service_frostfs_fuzz.go | 121 ++++ netmap/grpc/service_frostfs_test.go | 71 ++ netmap/grpc/types.go | 212 ------ netmap/grpc/types.pb.go | Bin 47747 -> 0 bytes netmap/grpc/types_frostfs.pb.go | Bin 0 -> 52081 bytes netmap/grpc/types_frostfs_fuzz.go | 159 +++++ netmap/grpc/types_frostfs_test.go | 91 +++ object/convert.go | 2 +- object/grpc/service.go | 610 ------------------ object/grpc/service.pb.go | Bin 167583 -> 0 bytes object/grpc/service_frostfs.pb.go | Bin 0 -> 216487 bytes object/grpc/service_frostfs_fuzz.go | 387 +++++++++++ object/grpc/service_frostfs_test.go | 211 ++++++ object/grpc/service_grpc.pb.go | Bin 46612 -> 46612 bytes object/grpc/status.pb.go | Bin 8502 -> 0 bytes object/grpc/types.go | 197 ------ object/grpc/types.pb.go | Bin 52664 -> 0 bytes object/grpc/types_frostfs.pb.go | Bin 0 -> 60069 bytes object/grpc/types_frostfs_fuzz.go | 102 +++ object/grpc/types_frostfs_test.go | 61 ++ refs/grpc/types.go | 97 --- refs/grpc/types.pb.go | Bin 27241 -> 0 bytes refs/grpc/types_frostfs.pb.go | Bin 0 -> 27819 bytes refs/grpc/types_frostfs_fuzz.go | 159 +++++ refs/grpc/types_frostfs_test.go | 91 +++ rpc/client/client.go | 2 + rpc/message/encoding.go | 35 +- rpc/message/test/message.go | 1 + rpc/netmap.go | 1 - session/convert.go | 2 +- session/grpc/service.go | 55 -- session/grpc/service.pb.go | Bin 18263 -> 0 bytes session/grpc/service_frostfs.pb.go | Bin 0 -> 19348 bytes session/grpc/service_frostfs_fuzz.go | 45 ++ session/grpc/service_frostfs_test.go | 31 + session/grpc/types.go | 246 ------- session/grpc/types.pb.go | Bin 57288 -> 0 bytes session/grpc/types_frostfs.pb.go | Bin 0 -> 65581 bytes session/grpc/types_frostfs_fuzz.go | 159 +++++ session/grpc/types_frostfs_test.go | 91 +++ signature/marshaller.go | 4 + status/grpc/types.go | 26 - status/grpc/types.pb.go | Bin 24204 -> 0 bytes status/grpc/types_frostfs.pb.go | Bin 0 -> 13274 bytes status/grpc/types_frostfs_fuzz.go | 26 + status/grpc/types_frostfs_test.go | 21 + tombstone/grpc/types.go | 20 - tombstone/grpc/types.pb.go | Bin 7276 -> 0 bytes tombstone/grpc/types_frostfs.pb.go | Bin 0 -> 5306 bytes tombstone/grpc/types_frostfs_fuzz.go | 26 + tombstone/grpc/types_frostfs_test.go | 21 + util/pool/marshal.go | 7 + util/proto/encoding/compat.go | 22 + util/proto/encoding/json.go | 48 ++ util/proto/encoding/proto.go | 57 ++ util/proto/marshal.go | 13 +- util/protogen/internal_gengo/file.go | 260 ++++++++ util/protogen/internal_gengo/fuzz.go | 69 ++ util/protogen/internal_gengo/getter.go | 14 + util/protogen/internal_gengo/json.go | 211 ++++++ util/protogen/internal_gengo/options.go | 7 + util/protogen/internal_gengo/proto.go | 240 +++++++ .../internal_gengo/proto_field_type.go | 56 ++ .../internal_gengo/proto_stable_compat.go | 124 ++++ util/protogen/main.go | 268 +------- util/signature/data.go | 18 +- 116 files changed, 4048 insertions(+), 2520 deletions(-) delete mode 100644 accounting/grpc/service.go delete mode 100644 accounting/grpc/service.pb.go create mode 100644 accounting/grpc/service_frostfs.pb.go create mode 100644 accounting/grpc/service_frostfs_fuzz.go create mode 100644 accounting/grpc/service_frostfs_test.go delete mode 100644 accounting/grpc/types.go delete mode 100644 accounting/grpc/types.pb.go create mode 100644 accounting/grpc/types_frostfs.pb.go create mode 100644 accounting/grpc/types_frostfs_fuzz.go create mode 100644 accounting/grpc/types_frostfs_test.go delete mode 100644 acl/grpc/types.go delete mode 100644 acl/grpc/types.pb.go create mode 100644 acl/grpc/types_frostfs.pb.go create mode 100644 acl/grpc/types_frostfs_fuzz.go create mode 100644 acl/grpc/types_frostfs_test.go delete mode 100644 ape/grpc/types.go delete mode 100644 ape/grpc/types.pb.go create mode 100644 ape/grpc/types_frostfs.pb.go create mode 100644 ape/grpc/types_frostfs_fuzz.go create mode 100644 ape/grpc/types_frostfs_test.go delete mode 100644 apemanager/grpc/service.go delete mode 100644 apemanager/grpc/service.pb.go create mode 100644 apemanager/grpc/service_frostfs.pb.go create mode 100644 apemanager/grpc/service_frostfs_fuzz.go create mode 100644 apemanager/grpc/service_frostfs_test.go create mode 100644 apemanager/grpc/types_frostfs.pb.go create mode 100644 apemanager/grpc/types_frostfs_fuzz.go create mode 100644 apemanager/grpc/types_frostfs_test.go delete mode 100644 container/grpc/service.go delete mode 100644 container/grpc/service.pb.go create mode 100644 container/grpc/service_frostfs.pb.go create mode 100644 container/grpc/service_frostfs_fuzz.go create mode 100644 container/grpc/service_frostfs_test.go delete mode 100644 container/grpc/types.go delete mode 100644 container/grpc/types.pb.go create mode 100644 container/grpc/types_frostfs.pb.go create mode 100644 container/grpc/types_frostfs_fuzz.go create mode 100644 container/grpc/types_frostfs_test.go delete mode 100644 lock/grpc/types.go delete mode 100644 lock/grpc/types.pb.go create mode 100644 lock/grpc/types_frostfs.pb.go create mode 100644 lock/grpc/types_frostfs_fuzz.go create mode 100644 lock/grpc/types_frostfs_test.go delete mode 100644 netmap/grpc/service.go delete mode 100644 netmap/grpc/service.pb.go create mode 100644 netmap/grpc/service_frostfs.pb.go create mode 100644 netmap/grpc/service_frostfs_fuzz.go create mode 100644 netmap/grpc/service_frostfs_test.go delete mode 100644 netmap/grpc/types.go delete mode 100644 netmap/grpc/types.pb.go create mode 100644 netmap/grpc/types_frostfs.pb.go create mode 100644 netmap/grpc/types_frostfs_fuzz.go create mode 100644 netmap/grpc/types_frostfs_test.go delete mode 100644 object/grpc/service.go delete mode 100644 object/grpc/service.pb.go create mode 100644 object/grpc/service_frostfs.pb.go create mode 100644 object/grpc/service_frostfs_fuzz.go create mode 100644 object/grpc/service_frostfs_test.go delete mode 100644 object/grpc/status.pb.go delete mode 100644 object/grpc/types.go delete mode 100644 object/grpc/types.pb.go create mode 100644 object/grpc/types_frostfs.pb.go create mode 100644 object/grpc/types_frostfs_fuzz.go create mode 100644 object/grpc/types_frostfs_test.go delete mode 100644 refs/grpc/types.go delete mode 100644 refs/grpc/types.pb.go create mode 100644 refs/grpc/types_frostfs.pb.go create mode 100644 refs/grpc/types_frostfs_fuzz.go create mode 100644 refs/grpc/types_frostfs_test.go delete mode 100644 session/grpc/service.go delete mode 100644 session/grpc/service.pb.go create mode 100644 session/grpc/service_frostfs.pb.go create mode 100644 session/grpc/service_frostfs_fuzz.go create mode 100644 session/grpc/service_frostfs_test.go delete mode 100644 session/grpc/types.go delete mode 100644 session/grpc/types.pb.go create mode 100644 session/grpc/types_frostfs.pb.go create mode 100644 session/grpc/types_frostfs_fuzz.go create mode 100644 session/grpc/types_frostfs_test.go delete mode 100644 status/grpc/types.go delete mode 100644 status/grpc/types.pb.go create mode 100644 status/grpc/types_frostfs.pb.go create mode 100644 status/grpc/types_frostfs_fuzz.go create mode 100644 status/grpc/types_frostfs_test.go delete mode 100644 tombstone/grpc/types.go delete mode 100644 tombstone/grpc/types.pb.go create mode 100644 tombstone/grpc/types_frostfs.pb.go create mode 100644 tombstone/grpc/types_frostfs_fuzz.go create mode 100644 tombstone/grpc/types_frostfs_test.go create mode 100644 util/pool/marshal.go create mode 100644 util/proto/encoding/compat.go create mode 100644 util/proto/encoding/json.go create mode 100644 util/proto/encoding/proto.go create mode 100644 util/protogen/internal_gengo/file.go create mode 100644 util/protogen/internal_gengo/fuzz.go create mode 100644 util/protogen/internal_gengo/getter.go create mode 100644 util/protogen/internal_gengo/json.go create mode 100644 util/protogen/internal_gengo/options.go create mode 100644 util/protogen/internal_gengo/proto.go create mode 100644 util/protogen/internal_gengo/proto_field_type.go create mode 100644 util/protogen/internal_gengo/proto_stable_compat.go diff --git a/Makefile b/Makefile index db1cc2d..35e89e8 100755 --- a/Makefile +++ b/Makefile @@ -65,8 +65,9 @@ protoc: echo "⇒ Processing $$f "; \ $(PROTOC_DIR)/bin/protoc \ --proto_path=.:$(PROTOC_DIR)/include:/usr/local/include \ - --plugin=protoc-gen-go=$(PROTOC_GEN_GO_DIR)/protoc-gen-go \ - --go_out=. --go_opt=paths=source_relative \ + --plugin=protoc-gen-go-frostfs=$(abspath ./bin/protogen) \ + --go-frostfs_out=fuzz=true:. \ + --go-frostfs_opt=paths=source_relative \ --go-grpc_opt=require_unimplemented_servers=false \ --go-grpc_out=. --go-grpc_opt=paths=source_relative $$f; \ done diff --git a/accounting/grpc/service.go b/accounting/grpc/service.go deleted file mode 100644 index fa292bf..0000000 --- a/accounting/grpc/service.go +++ /dev/null @@ -1,46 +0,0 @@ -package accounting - -import ( - refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc" - session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc" -) - -// SetOwnerId sets identifier of the account owner. -func (m *BalanceRequest_Body) SetOwnerId(v *refs.OwnerID) { - m.OwnerId = v -} - -// SetBody sets body of the request. -func (m *BalanceRequest) SetBody(v *BalanceRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *BalanceRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *BalanceRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetBalance sets balance value of the response. -func (m *BalanceResponse_Body) SetBalance(v *Decimal) { - m.Balance = v -} - -// SetBody sets body of the response. -func (m *BalanceResponse) SetBody(v *BalanceResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *BalanceResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *BalanceResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} diff --git a/accounting/grpc/service.pb.go b/accounting/grpc/service.pb.go deleted file mode 100644 index b66bb7a734180741951721c0c74c2469ab5ad97e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18996 zcmd^HYj4{|7X2*!ifKM%t-z-BvYlv=1=={t8fcmzc8X$yz^0{<%#B34B&En3_`mPD z_YTRSL{gM%rzu*Xj>MU{k8@u$!x`=Gs~5pYtBLk?=*D`aE^pLz7{tMF56|`{fuoM! zs$brosh7tmXHIi}UoCVPd4V4d=u0ElSuHwFujjO_7G?fh95~%0r%NqSFb{`%pxogw znESEkPxdF_^>9DZ;ldkghe!ES&2X(_lXO*}dF1Eqm^@2UYeL-ThFHBj)x(#a>4(Bl6*JdM%p>g7~wpKFwl$z1Y`=5T{4zHwVCdp~?yxExh zpZ(yA|H{+TQDhPNU_Wm%LO%tg8x@RU7OgHtXcgwAh7Gvale|*r{O}_2vB9Iun^;G? zo!#I%-u2y?etrqsyWHM;r2ZQPKKjt3VCKbob{*e5x?mYzxMAq&$l@EjiUKN}xiPHl zsDEpBq(cRdKtrVF5t2pV!&Bk_qbBnyBLmzG&?*jHKjLt8{gE04pza5;a>ru|l|(_k z)WbP*Xg1#H*fngPP<%VacGmMXUAvjCGYmh!Vlj6~)#vm;=&e9t_uPcUf&#}IG75P_ z&M1t8Uy4W^Fr4lj#ze?sm}a~Bh_NU!a)MA8%+XBfz?Fudx#KVhL*V1X-_V_jF_1Hl z(+(T~zK%#P!iigqsHS}luU>{1Yj%@EOdb_tmhWw&cH3-@=SVy|OSR&kE%jbUI^Jnf zXgygXi{$us~)jdRfvxnup(cQ2=KFAQqTJT-W(9*@1LKF-A5_}-pLmkgUzgPz910j~JjOZG6@2CzNF$lsc_T2Zqlo<47u^#j%?&x>Ul=H+%_;yBf)zXk*(5iUZQ^rH*(am zzDATGI7b8ZAzG~mj*X^stfOJ*UBf33{!xtl;uwElvsl&@HrV<2iPG_|`uGX{#UWrk zqJ}ev?iV8V`adV{c3OtS*LJlFzSc3-1F&8ZOv(hz4~%ohGV&}P8fT*hYi5pF5Y}Lo zC1qk*lCGX*7CKU<$qFIHs-Q%>v zVwNRntF}vf)R9#)=kum@4n8;goiV6zu}(89vFP z_|1pYGlgXygrdy=+Qu-F{v+c3K5v5EMRoD^3;sDdzHo~6V8ogJ+zHgL?$jI6&IV@s zDYgVyDmvK)8zQA9;`MrJCI`#k-{)S4r7Wy8#k!#(7>s1X+;I#f>r)YH3kSPMIz0DA zvZuk{PDU#m8fl+;>v9IWqMGuK8FzY^irW3A6*beQrS7w;+H`AG*0li-Qe6q$zfX0| zFx|ewW@B5}5lB|~Nc<15bl+8#t9KKTD7KOkMoIa}azs_JF@s9#3=*L z4QV8`*FT;jU4Pa-XEVy$X`1^-l$MJunOS@4RBR^R0z*NEM;_~;H*=>KNrFTja2Elx zDebd(^qv4?B5cH~FJ62_q_Fvk;)k~+E7icBTl~4@;Kw?crT8R>(F)sa;y*E{RHpY! z>AaHAlcyW=xdm56LbrN7Oh)g0(~NGZbH6D)N4Qo_Umx)xNuBWh`y_P>)a|pnHTc2P zdZ#?C=ft2zl*BpZ^&~A+WpvZMAfqqbP`%ptIwb!Jfcj?@uGu6S^>?B1-bVJaA#i)y zcA@mLgXKVbc}M^(4|~?%F?~Kd;3wGp#^*kNewIBsJfhEC?kS&-y4FvIdl~ zLAx4FM!C<-4Ehq)k{m?{p}?XX2pfhPBC-bDa44N*024Ka;?EoG#A6HXWZA%uRY80$ zshRK*A;iZd#KbBhJC7A+TexYz1dx6L1=*|!3DN+3&@A{K-jxt2NUR(%8)K~z+u(?y zFh0Y~4n<`FjX$rLu1sEHBay_=!E&TQX^3$eC^Q`indh4 zIRcKj^h(xBU4|GK4-v%~gf!WbF)MRzN9ws`Gx^Jar@59G)R~xw$|Bc#|9-UweU`n? zvKvc?vgN~|nT(PQW-1_SkgI@Ww!u~4}=D@2@h$^*_e zU>WaR6hYM3gI#l_CNcwdwOZNH&btyfTw*J-FENlHx^q#42BkGoYVw^82+}gP!hQ^q zWtOcBNG6pKV@FSG06iDiFeOvINKD?fG=iw4bYt+OGG<<6GJe9D2Jq)v#%F`~7>Sk2 zXhCFWP4<=^R|PXbDuiTNNpO{Gn>6ndgX&0@ErvTg0yB`jxGC`xXp(aTMj2(*WT}a! ztcpd=DpTg8mg2@xTf!nsu0viu2(TSlqxJuQ><3mo5H~SVop@&EMP_bnr*77ue#I6F zU4}8WS;iop$xxWwN3j%}F@rLr)pp8U>Sn;x=`b-c*`HOD&6_`1WFWhNNQ`{P4K#Ms zjTXvmkW(|66OcWuRA^^SLz-RufKx?Z3XV88!;ZKi21Xq*tl-W>ZRpm`Zt|ssn`BcS zCHpl8l6YiRks1W@_QkIy&j=e%$TA1*+xdq@G21`o!ZAd)Q(94N_JUa1t~?j@ElDM; z%(e+XUzzJM16xv7xisep31(yBRwlo!cduyUa61OB6nX}yBVHsn5Ew->c`jBl$xe`! z;wSziSyME#!%ZOKp5hvk#|~HzSuxnp5df@#7`8T0hs?4qmSfVU8VUtVxE>hb{5Wu9-b%TCvp_;gZz>Ew90*_@{{QT2zCI?i#hLmcr= z0%NxrY;@!EvwS7&H|Iq#!>isXVv*{LL6qoj1^(aqa6FAoj9PK%Qw!(5fnlN1f zvs_?TFxwJMVOInvww1v)7xP7Iv$X0Y2R+Mdm=8cqT0uV-{zddH+?`7~rcg%T8lFUE z0~0TB$>jm7+mGoj|5J0n-`H;8`PcLKobO}T3$kVdYcsGa%N6CUaM89tFM*@k5cEDi z8+6*A=)@Zxbc^PfdsCdK<}-6}x~l-UpflplhM4r@)4{XKF`4exkf+5%^fJ~yAE8UL z(l_()^&Du(*l9+WWRL&_>+l3Y0Te2?$&)|t$jzPGifvI%iM-}GwpxfbiLsmvJp zh)m)9k2HzQ?OrcYm6 z_A{PoHzJ&Z#QFXO-BDgR)>Mf@z4cEFq#1c*=;F#@dq5wP`SIh0!#`4xHh0#VvtJ=F z6uPTja=%VMlty~&&Zlv%A6)`P(=Gnc|Jxwb`E>8dNL2pyq3PZ~H0(5Tg7`1*IlcRb zM?B~I#RtK~MQ};K9f022ROb+;|mJo=aU?4>`S zMFW}7)2W9>0}su*nxE4~AwPVX)H6Izdz#4s_oPkH#x4DMEemWzmWkI$LuOe{1aQ$` z`?$+9yg9)?OAY!p2$(el5wLa!ST@K|gFv#^01CGb+hqqk9AvcWAF)6gf#n_QxXoq` WhH!ouk!E_o;|wAA4Nr8 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 literal 0 HcmV?d00001 diff --git a/accounting/grpc/service_frostfs_fuzz.go b/accounting/grpc/service_frostfs_fuzz.go new file mode 100644 index 0000000..69e7174 --- /dev/null +++ b/accounting/grpc/service_frostfs_fuzz.go @@ -0,0 +1,45 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package accounting + +func DoFuzzProtoBalanceRequest(data []byte) int { + msg := new(BalanceRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONBalanceRequest(data []byte) int { + msg := new(BalanceRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoBalanceResponse(data []byte) int { + msg := new(BalanceResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONBalanceResponse(data []byte) int { + msg := new(BalanceResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/accounting/grpc/service_frostfs_test.go b/accounting/grpc/service_frostfs_test.go new file mode 100644 index 0000000..b97a13e --- /dev/null +++ b/accounting/grpc/service_frostfs_test.go @@ -0,0 +1,31 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package accounting + +import ( + testing "testing" +) + +func FuzzProtoBalanceRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoBalanceRequest(data) + }) +} +func FuzzJSONBalanceRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONBalanceRequest(data) + }) +} +func FuzzProtoBalanceResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoBalanceResponse(data) + }) +} +func FuzzJSONBalanceResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONBalanceResponse(data) + }) +} diff --git a/accounting/grpc/types.go b/accounting/grpc/types.go deleted file mode 100644 index 1c1bac9..0000000 --- a/accounting/grpc/types.go +++ /dev/null @@ -1,11 +0,0 @@ -package accounting - -// SetValue sets value of the decimal number. -func (m *Decimal) SetValue(v int64) { - m.Value = v -} - -// SetPrecision sets precision of the decimal number. -func (m *Decimal) SetPrecision(v uint32) { - m.Precision = v -} diff --git a/accounting/grpc/types.pb.go b/accounting/grpc/types.pb.go deleted file mode 100644 index 8be14bc55f8a0b938c02ae018306c084fd30867e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6048 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 B#f$&| literal 0 HcmV?d00001 diff --git a/acl/grpc/types_frostfs_fuzz.go b/acl/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..5d5b763 --- /dev/null +++ b/acl/grpc/types_frostfs_fuzz.go @@ -0,0 +1,64 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package acl + +func DoFuzzProtoEACLRecord(data []byte) int { + msg := new(EACLRecord) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONEACLRecord(data []byte) int { + msg := new(EACLRecord) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoEACLTable(data []byte) int { + msg := new(EACLTable) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONEACLTable(data []byte) int { + msg := new(EACLTable) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoBearerToken(data []byte) int { + msg := new(BearerToken) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONBearerToken(data []byte) int { + msg := new(BearerToken) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/acl/grpc/types_frostfs_test.go b/acl/grpc/types_frostfs_test.go new file mode 100644 index 0000000..c6d1c43 --- /dev/null +++ b/acl/grpc/types_frostfs_test.go @@ -0,0 +1,41 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package acl + +import ( + testing "testing" +) + +func FuzzProtoEACLRecord(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoEACLRecord(data) + }) +} +func FuzzJSONEACLRecord(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONEACLRecord(data) + }) +} +func FuzzProtoEACLTable(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoEACLTable(data) + }) +} +func FuzzJSONEACLTable(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONEACLTable(data) + }) +} +func FuzzProtoBearerToken(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoBearerToken(data) + }) +} +func FuzzJSONBearerToken(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONBearerToken(data) + }) +} diff --git a/ape/grpc/types.go b/ape/grpc/types.go deleted file mode 100644 index 931b6a3..0000000 --- a/ape/grpc/types.go +++ /dev/null @@ -1,21 +0,0 @@ -package ape - -func (t *ChainTarget) SetType(typ TargetType) { - t.Type = typ -} - -func (t *ChainTarget) SetName(name string) { - t.Name = name -} - -func (c *Chain) SetKind(kind isChain_Kind) { - c.Kind = kind -} - -func (cr *Chain_Raw) SetRaw(raw []byte) { - cr.Raw = raw -} - -func (cr *Chain_Raw) GetRaw() []byte { - return cr.Raw -} diff --git a/ape/grpc/types.pb.go b/ape/grpc/types.pb.go deleted file mode 100644 index ee8e0a765d32483371c62e38741d1c7eac5db51b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9385 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 literal 0 HcmV?d00001 diff --git a/ape/grpc/types_frostfs_fuzz.go b/ape/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..b7bf367 --- /dev/null +++ b/ape/grpc/types_frostfs_fuzz.go @@ -0,0 +1,45 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package ape + +func DoFuzzProtoChainTarget(data []byte) int { + msg := new(ChainTarget) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONChainTarget(data []byte) int { + msg := new(ChainTarget) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoChain(data []byte) int { + msg := new(Chain) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONChain(data []byte) int { + msg := new(Chain) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/ape/grpc/types_frostfs_test.go b/ape/grpc/types_frostfs_test.go new file mode 100644 index 0000000..93d7eea --- /dev/null +++ b/ape/grpc/types_frostfs_test.go @@ -0,0 +1,31 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package ape + +import ( + testing "testing" +) + +func FuzzProtoChainTarget(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoChainTarget(data) + }) +} +func FuzzJSONChainTarget(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONChainTarget(data) + }) +} +func FuzzProtoChain(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoChain(data) + }) +} +func FuzzJSONChain(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONChain(data) + }) +} diff --git a/apemanager/grpc/service.go b/apemanager/grpc/service.go deleted file mode 100644 index bd77db0..0000000 --- a/apemanager/grpc/service.go +++ /dev/null @@ -1,106 +0,0 @@ -package apemanager - -import ( - ape "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape/grpc" - session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc" -) - -func (rb *AddChainRequest_Body) SetTarget(t *ape.ChainTarget) { - rb.Target = t -} - -func (rb *AddChainRequest_Body) SetChain(chain *ape.Chain) { - rb.Chain = chain -} - -func (r *AddChainRequest) SetBody(rb *AddChainRequest_Body) { - r.Body = rb -} - -func (r *AddChainRequest) SetMetaHeader(mh *session.RequestMetaHeader) { - r.MetaHeader = mh -} - -func (r *AddChainRequest) SetVerifyHeader(vh *session.RequestVerificationHeader) { - r.VerifyHeader = vh -} - -func (rb *AddChainResponse_Body) SetChainId(chainID []byte) { - rb.ChainId = chainID -} - -func (r *AddChainResponse) SetBody(rb *AddChainResponse_Body) { - r.Body = rb -} - -func (r *AddChainResponse) SetMetaHeader(mh *session.ResponseMetaHeader) { - r.MetaHeader = mh -} - -func (r *AddChainResponse) SetVerifyHeader(vh *session.ResponseVerificationHeader) { - r.VerifyHeader = vh -} - -func (rb *RemoveChainRequest_Body) SetTarget(t *ape.ChainTarget) { - rb.Target = t -} - -func (rb *RemoveChainRequest_Body) SetChainId(chainID []byte) { - rb.ChainId = chainID -} - -func (r *RemoveChainRequest) SetBody(rb *RemoveChainRequest_Body) { - r.Body = rb -} - -func (r *RemoveChainRequest) SetMetaHeader(mh *session.RequestMetaHeader) { - r.MetaHeader = mh -} - -func (r *RemoveChainRequest) SetVerifyHeader(vh *session.RequestVerificationHeader) { - r.VerifyHeader = vh -} - -func (r *RemoveChainResponse) SetBody(rb *RemoveChainResponse_Body) { - r.Body = rb -} - -func (r *RemoveChainResponse) SetMetaHeader(mh *session.ResponseMetaHeader) { - r.MetaHeader = mh -} - -func (r *RemoveChainResponse) SetVerifyHeader(vh *session.ResponseVerificationHeader) { - r.VerifyHeader = vh -} - -func (r *ListChainsRequest_Body) SetTarget(t *ape.ChainTarget) { - r.Target = t -} - -func (r *ListChainsRequest) SetBody(rb *ListChainsRequest_Body) { - r.Body = rb -} - -func (r *ListChainsRequest) SetMetaHeader(mh *session.RequestMetaHeader) { - r.MetaHeader = mh -} - -func (r *ListChainsRequest) SetVerifyHeader(vh *session.RequestVerificationHeader) { - r.VerifyHeader = vh -} - -func (rb *ListChainsResponse_Body) SetChains(chains []*ape.Chain) { - rb.Chains = chains -} - -func (r *ListChainsResponse) SetBody(rb *ListChainsResponse_Body) { - r.Body = rb -} - -func (r *ListChainsResponse) SetMetaHeader(mh *session.ResponseMetaHeader) { - r.MetaHeader = mh -} - -func (r *ListChainsResponse) SetVerifyHeader(vh *session.ResponseVerificationHeader) { - r.VerifyHeader = vh -} diff --git a/apemanager/grpc/service.pb.go b/apemanager/grpc/service.pb.go deleted file mode 100644 index 3baf193044d1b17f811f898a2e6ec89eb0747b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46394 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 diff --git a/apemanager/grpc/service_frostfs.pb.go b/apemanager/grpc/service_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..b2d867631a7326484c08704d8bc052669b3461fe GIT binary patch literal 56051 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 Sb|GF`2VI7P^L{)Daq2&6g4|~S literal 0 HcmV?d00001 diff --git a/apemanager/grpc/service_frostfs_fuzz.go b/apemanager/grpc/service_frostfs_fuzz.go new file mode 100644 index 0000000..08af63e --- /dev/null +++ b/apemanager/grpc/service_frostfs_fuzz.go @@ -0,0 +1,121 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package apemanager + +func DoFuzzProtoAddChainRequest(data []byte) int { + msg := new(AddChainRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONAddChainRequest(data []byte) int { + msg := new(AddChainRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoAddChainResponse(data []byte) int { + msg := new(AddChainResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONAddChainResponse(data []byte) int { + msg := new(AddChainResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoRemoveChainRequest(data []byte) int { + msg := new(RemoveChainRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONRemoveChainRequest(data []byte) int { + msg := new(RemoveChainRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoRemoveChainResponse(data []byte) int { + msg := new(RemoveChainResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONRemoveChainResponse(data []byte) int { + msg := new(RemoveChainResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoListChainsRequest(data []byte) int { + msg := new(ListChainsRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONListChainsRequest(data []byte) int { + msg := new(ListChainsRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoListChainsResponse(data []byte) int { + msg := new(ListChainsResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONListChainsResponse(data []byte) int { + msg := new(ListChainsResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/apemanager/grpc/service_frostfs_test.go b/apemanager/grpc/service_frostfs_test.go new file mode 100644 index 0000000..5c4653c --- /dev/null +++ b/apemanager/grpc/service_frostfs_test.go @@ -0,0 +1,71 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package apemanager + +import ( + testing "testing" +) + +func FuzzProtoAddChainRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoAddChainRequest(data) + }) +} +func FuzzJSONAddChainRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONAddChainRequest(data) + }) +} +func FuzzProtoAddChainResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoAddChainResponse(data) + }) +} +func FuzzJSONAddChainResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONAddChainResponse(data) + }) +} +func FuzzProtoRemoveChainRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoRemoveChainRequest(data) + }) +} +func FuzzJSONRemoveChainRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONRemoveChainRequest(data) + }) +} +func FuzzProtoRemoveChainResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoRemoveChainResponse(data) + }) +} +func FuzzJSONRemoveChainResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONRemoveChainResponse(data) + }) +} +func FuzzProtoListChainsRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoListChainsRequest(data) + }) +} +func FuzzJSONListChainsRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONListChainsRequest(data) + }) +} +func FuzzProtoListChainsResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoListChainsResponse(data) + }) +} +func FuzzJSONListChainsResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONListChainsResponse(data) + }) +} diff --git a/apemanager/grpc/types_frostfs.pb.go b/apemanager/grpc/types_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..ee23ce0168601517c5aac151d4c5cacc86837f57 GIT binary patch literal 8069 zcmeHM+iu%N5Pg=uVnd)U={l5e$b$+ONNlBWo5)6NHxH@duBD~Th8KYsiLT*)@0r=< zl2jzSZWFWxD#Wq4J3BKwmoqc;U?2|CsS?*JQJE~%R9xMPS(X;*9{7$2XB(c#gV-|x@l&bDLs&%j@4;RW=%rc;a=I#zvpq=;MhiO6v7m zu{A&BjXoO{yxMSe=U$^^0VHVa8OSJC&_;*w!HoPMZA7e>+GE`(bqKZ|X1Jw>?A;pJ_tJ{Kwo7lV*b<+DM1SM}}mfy$-xhZfX zccZ1A=O$rw=ZWnC{v?oVz=C<`2yF&lg$b0tubkvEif zAnZ+nsCCH#xppD3A?==-N@Z)+3cbo2IgMUgDPqssusVoyTIiM+l1zeFDKrI8in4r# zQYJk9zE;G)qZKVcD^dk=VLAM({C2U~7jU8l9{34yxjNU7^K?nzV^c%P>J<5H9~%tQ zCTZ8yt+lLA4eNP}H3y}&>wN85s71G2?o(E)q#Xbw7$qHNEnn!weCM{`z+Fv>@1v>d z!1Ir%$K&P1U8<&!W~;$OVnsDbgE6O<$7CS%{6U?3I8DI{%$qn22_gGKx4LwKg0LhJ;jc zzq$Jcs=}~6Jrm3_6@*pYaRNv;f8j>z7iWkWqu1rGi9c))FDP?pPiHqQ-M~1uV55g6 zB#55}B-Gr^rEIYV-_Bj`aTgsG7I@djg{62Bj2m}EL0P}J9@|EK4H&>MPM)Dm?-ot@J>Gs*{(ono^I!0E@NLkKv4;TcL#ILluRwi6g2}&sc(4g-2M* zM|EqoIZtvKC|xuNHMq|wDLD3CCdEM-r3s5!p)3(uHJTG~Ecpb*a1kanNU+kTNRe=k zKPpaoEEv)~`LaDOyDiwGonFwbBy=T?X=;}6v8Wi(BfP6?j6-qke8M~DInMH>JDADN zFe8|w3SKiKhSnVBa#+JsV^)U!CC`DN?KtXiR#y_!1X6$^3^dSj4C{fhQ=llL3aYK# z2DGNHpTcBX4;x|5yO*@~IcBLRO;HW;65`j|;kO;RmWXXq@hoQ!EEE6RW+r+yP|t5v zsd%yh=&mdX24D2F#5sjme|1Av`Q$O*Ot6_0Xxd7phy`jbwq9Zt?__lP|^Q|XRm$*JVkFF7E2!X{oF zBmdpe=m|p+yg(pN9Ymdin2AhNNIUS?U!RGr9H5$EJnt}ORMS8O82@w*VTEup=%e3F5RBE@RJEBa zdS#;3UJZ8!#Hy+dX>0W)dGnUM$CPAfCCh0=o07ZMWFUM@6U`J>)7sQ;kKl-k^Zm0< zNfv_t+4;z-VY_II0AFr0GA(3PQTtj~OKOMM;rwQy2|DWhxT#z}OJ#Cl2Az6zF}+}S zmg3D<=vQCtX>h36qttyOiSX7>mQg|Cx&xUV_dxVzC!-dC{}VG&OT3MP|ED26KRsz0 zLOkk$MMrp|7Ot%p6m38fQ$+|EyEBu<8(QtryoBkaRmgfeV!zN>qbHJ1`9c4yU$`^$ zx8@OyhMf_H%L8UI^G76Lro&plGnYE-CHzeGu{o DmB8MU literal 0 HcmV?d00001 diff --git a/apemanager/grpc/types_frostfs_fuzz.go b/apemanager/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..f2f9f19 --- /dev/null +++ b/apemanager/grpc/types_frostfs_fuzz.go @@ -0,0 +1,45 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package apemanager + +func DoFuzzProtoChainTarget(data []byte) int { + msg := new(ChainTarget) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONChainTarget(data []byte) int { + msg := new(ChainTarget) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoChain(data []byte) int { + msg := new(Chain) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONChain(data []byte) int { + msg := new(Chain) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/apemanager/grpc/types_frostfs_test.go b/apemanager/grpc/types_frostfs_test.go new file mode 100644 index 0000000..e6db87e --- /dev/null +++ b/apemanager/grpc/types_frostfs_test.go @@ -0,0 +1,31 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package apemanager + +import ( + testing "testing" +) + +func FuzzProtoChainTarget(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoChainTarget(data) + }) +} +func FuzzJSONChainTarget(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONChainTarget(data) + }) +} +func FuzzProtoChain(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoChain(data) + }) +} +func FuzzJSONChain(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONChain(data) + }) +} diff --git a/container/grpc/service.go b/container/grpc/service.go deleted file mode 100644 index d19add1..0000000 --- a/container/grpc/service.go +++ /dev/null @@ -1,234 +0,0 @@ -package container - -import ( - acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc" - refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc" - session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc" -) - -// SetContainer sets container of the request. -func (m *PutRequest_Body) SetContainer(v *Container) { - m.Container = v -} - -// SetSignature sets signature of the container structure. -func (m *PutRequest_Body) SetSignature(v *refs.SignatureRFC6979) { - m.Signature = v -} - -// SetBody sets body of the request. -func (m *PutRequest) SetBody(v *PutRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *PutRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *PutRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainerId sets identifier of the container. -func (m *PutResponse_Body) SetContainerId(v *refs.ContainerID) { - m.ContainerId = v -} - -// SetBody sets body of the response. -func (m *PutResponse) SetBody(v *PutResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *PutResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *PutResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainerId sets identifier of the container. -func (m *DeleteRequest_Body) SetContainerId(v *refs.ContainerID) { - m.ContainerId = v -} - -// SetSignature sets signature of the container identifier. -func (m *DeleteRequest_Body) SetSignature(v *refs.SignatureRFC6979) { - m.Signature = v -} - -// SetBody sets body of the request. -func (m *DeleteRequest) SetBody(v *DeleteRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *DeleteRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *DeleteRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetBody sets body of the response. -func (m *DeleteResponse) SetBody(v *DeleteResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *DeleteResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *DeleteResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainerId sets identifier of the container. -func (m *GetRequest_Body) SetContainerId(v *refs.ContainerID) { - m.ContainerId = v -} - -// SetBody sets body of the request. -func (m *GetRequest) SetBody(v *GetRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *GetRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *GetRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainer sets the container structure. -func (m *GetResponse_Body) SetContainer(v *Container) { - m.Container = v -} - -// SetSessionToken sets token of the session within which requested -// container was created. -func (m *GetResponse_Body) SetSessionToken(v *session.SessionToken) { - m.SessionToken = v -} - -// SetSignature sets signature of the container structure. -func (m *GetResponse_Body) SetSignature(v *refs.SignatureRFC6979) { - m.Signature = v -} - -// SetBody sets body of the response. -func (m *GetResponse) SetBody(v *GetResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *GetResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *GetResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} - -// SetOwnerId sets identifier of the container owner. -func (m *ListRequest_Body) SetOwnerId(v *refs.OwnerID) { - m.OwnerId = v -} - -// SetBody sets body of the request. -func (m *ListRequest) SetBody(v *ListRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *ListRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *ListRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainerIds sets list of the container identifiers. -func (m *ListResponse_Body) SetContainerIds(v []*refs.ContainerID) { - m.ContainerIds = v -} - -// SetBody sets body of the response. -func (m *ListResponse) SetBody(v *ListResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *ListResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *ListResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} - -// SetContainerId sets identifier of the container. -func (m *GetExtendedACLRequest_Body) SetContainerId(v *refs.ContainerID) { - m.ContainerId = v -} - -// SetBody sets body of the request. -func (m *GetExtendedACLRequest) SetBody(v *GetExtendedACLRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *GetExtendedACLRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *GetExtendedACLRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetEacl sets eACL table structure. -func (m *GetExtendedACLResponse_Body) SetEacl(v *acl.EACLTable) { - m.Eacl = v -} - -// SetSignature sets signature of the eACL table structure. -func (m *GetExtendedACLResponse_Body) SetSignature(v *refs.SignatureRFC6979) { - m.Signature = v -} - -// SetSessionToken sets token of the session within which requested -// eACl table was set. -func (m *GetExtendedACLResponse_Body) SetSessionToken(v *session.SessionToken) { - m.SessionToken = v -} - -// SetBody sets body of the response. -func (m *GetExtendedACLResponse) SetBody(v *GetExtendedACLResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *GetExtendedACLResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *GetExtendedACLResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} diff --git a/container/grpc/service.pb.go b/container/grpc/service.pb.go deleted file mode 100644 index 3bf1e14be30ad1959aa12c7ee5358f4076906c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79297 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 diff --git a/container/grpc/service_frostfs.pb.go b/container/grpc/service_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..7590435353ba794e63359706e4ff60159b8d3e21 GIT binary patch literal 96320 zcmeHQZF3tplKxEn3Pe?LD4#;DovPi6x4c!G*tzwU^HR2V^TA2&Qshvcm>lXjLs7a^ z{`+;~rP06u;E>XYq&!>7%9;VtjYi|8A3VUEor!Pf<4jy+MYb4L*;t(4h|9&invcGO zXJ1~-znm=QWi=@W;>C~RhacaGmoHwu8yp>74o4q{7nvB%i)xrd?xUl8b~#^EqJPx; zt(+I)I4ef;ab8@U;h)Dxy~(T+$MApf&x^(7=&3lq$g6=VKQAWpvv-SS_U&}O9KRl( zpXoPW4li?1E&H!>qc5%?ns$laiP4Wb-1*tSs|+VM@82&!?LgvaIsy8D@o= zNONyn1U40vVN89SV$MtP_~)%dD*a{mp!QBg$&A z9981?qu#g11;u0gPr?589~A%Wm|XSvKS#Z{`9(3TmWxb0MvofM-*3MA_RnAcVwKRoMmE?XVbB`8cv}R#fRZlW?!A>#c%;_3dIkOCd*9f$nr}g9 z|H-Mi9+3AyQ?1YP6tj@qKo%_$bE2z&6?KbA7ePb82szDWSy3r##(W6slr1L1QPLJ( z+5K@@iTA&r-&EO&{*88+iDyu47-+2b{Dgn~cUJX5<#9FvpAEbR2ky@x!S&$fEU!!j z`m@3JF#N%|Prlec!D2x6a{(`vH={1r9`Fa6Bi^d6gqe6u<4R3hqN!y=qZim_6rU-7 zc=U)r9a!H6FM=e0k`BZ2d3Bx*{(gCx6=PlX{u8V+c$E}J4&Vr*r%_=xg;#w~*i$7; z`4e?z(;#V&qU6xVjeLqSnDYDOVnklm&lU>-|IHV&8E`0^jD&5h@34PkAIh#PnC<5a zG0h4r;Y9pR8yWsM#Uj94CL`#G*Okm96G5j1i{eY&Y}k!Wr-Eg};3bNl^p8iwqL^1O zE)B<`fFkt30wdDrQa$Kv^c3t?2V>q7;CVs&LGp{@*@dH?6_k3aZhq_>u8G%)Ik4U5B-hni<) zchQ643cICV*A9M`%iG_GWVku_^EE()!>`u1SVkkl~2dtz|>v#Pfo>3 zjdaOo(F#$q^JOI-yYho`C8Qg?8LnXQ1A$rpxL8i7vZpDHWDDses80Wj-@gELaflnu z3z+0DA%M!SaqSJ+!Q98Ezu0BdmuJ|DjQLUW%No(W7X zor$DUyFbG5TD#Li`3=lYsZpq2227lfxm4vi<-7Ui>+C98FQk}&vW^-y$84r&cJTEoFP0e; zhf3>p0}7X}iR%UH^~cX3iS*fCPcDhrXp3)p6Fq6s*pF($V>>HRYvzS|$GQn*o?v=Z zM9#>^)BysLgTthwMKDDZji@(qjdYtTi);JAGuxinrvlCa3Ak_kf&I>l@>zf{<9!pl z`ca{IPQP{Fehwf32KoS24F3U3MH!pRdF07J0}0M6m0xF`Q6?Evoegs7v7LbmZ@`(cGiGC)9U!WhPD_F4f<#+zbO0DvPA~}6ASxqXO)vq5 z`Vf&_049@{@UIe4h+zR~Y;kW941qNWL?0##q#aJDbMWzOY%rcT8WS28HyAU(c#T-b z5^)OP94BWs|{0> zDwMK=R#;?}6-FllbT+`9n6-kq6ZjKZTA2m|X*pL*3xMrlRgX^5KXF2Ry^wHoQ_ZCN zKrH+1BZDFZmbuy+d9C$Iln?_b0sTkDLTn{& z-utWZ?J%$tA6h#^`0GS?(9f-rFF8?i&rfo}TLaZlh=Uv9 z1HJn8KtY&Ud+22ZsL9SyZy?n7Zm~4m7h1Q673EmPKGwFum>{qyuGz?Dw6P1h@?Bc$ zD~USt9^AUExG=|B{6)xK^1TxQ)a=HKXwPyGcfpUIp`%#jiJ%2bZG#QhHP9!n&0ves zF3tF=2RD)c=p&{^+|KWIDB^mc`(*@qlqyI5*iu?)V6sH=opYHu?Rr+ zC`JUgNL7V5f2}fg_eoZYm({#lJXft^bq#a{c`jW=wxEkbV|qcj78s*7oJ7QSi>i_? z1jPU{xGO;Q9QsZI+_YFKcB449DY2?3YC9wEO^Cvgj63?a!mbz=vQ`{-ySTu6KyKNB zZD*h@(}7&G!)qP9QSMEw#cQ!s1prfTe!^u20k+;dIjygOZS}MIkVS67(9(*8t>==i_1s9!|*HH^7(ItZmrW zdchc6S+9v1ChLJ;nMXX_Pj%gJ#VzQj5pFM{$7`a$-(#&8^ONIO_@48si5zE;}uf`_eFEy5q0rE%orWuf6B z$Zt{A)>-y5-su=FoG8&TT*@^ktC+QXhKu(0hf8rW6+AeOi&6X`ME)JiW#%6sd!Q^A z6$8=xqmtDdeVwY6%H$*I)`v+a5l_4vpCrXzK>Cq8zi> z#|*>44Si)F`?_W%`>JJA9SGA!8LS=;)C|WraoRH-Z2zQ*C}t?~xh||@B#|%Gjho5v z*)B|mhPib2taC(|n%3hCOc!$0q|&yCrsjzI<%$faX9aCTlc^+f!du zd&`v~N^`j{?4_LO+atdyNp`+*bTRA~KT#8%Y>^z@RR<}rIEYz4#p#NzPZtRt>xrA_ zDs!1*hHVmH;8ZOfyjpjgQjh{8v1AQHbEMw6QAtG3>l^eKF)4ZX(nip6U2BW&rU^8u zoM|9=ZB7~|eLOjubB|!<;~lJ_#*?rI&pI zH#s>z9HqQDsnls4Ls#Qa!#VDF9^z$APW`sRD{Q6>pb9S&jbllaLTB1nfTCl*;Y8Zq z?bP&6ab_*Xd~-YGgXF$>RXim2o2UB2z}`9r+$X?*^E{Vk+=qkeZ2;&g`b^769tv^j zUYcfuEI6k%IvyO|_2Kd0jql{PXSv3( zr*r31y=x@7SE?&VnQ%^NutK*tKRIty7eqnf%b%RY_j&)5Cpb!o^LvV_itQg7(hQ@t zvO?S^3`R?rOVxcU*(kiMrhu(%9G=m@wFxEKWW;%v-z(U*W5so>IQ@K}JrE8581U#dqS>&)Yjm~zi2@=oz2}&ihix0MIptR-m z)~&g5kp)p)!}>(m#CCkz;=01Jq{fMaXWL&5Wtx^TA1!nZ_rEm!{9m9Li^w+Psxb|0 z)@BHBJS&Y}F&wy_bq~>CuH@EywN~$N3bp^?-dG;2jYpzdcau{qcP9lEBOiYd$P4rJ zb@)pl9K8K?tw9s-%UYco=bl&Wt=&Evv^Tl*juxGcok!wYXTsGGxt1T}Vb&~W#OXu3#HCDIf&Nh+dcdzBQ zie7b}Qwo2^n^`Nc<*ud?@F_`ScmZG5csQR_@nb#jXfZol)6xPJegscapP?^de>_FZzD z+9qqTNo_<&x8QxzYwx7-tpn}Aougi@x_2e3#|zu6f;=bRhF4Xrt8pLu@W%f81@7H5 zu9rT@bPf|&;tZ3$BwNmK+K>d30cHrJJoM$XkQwa=CPd+M!8h>Y=cUrZuGkeAYsGP| zjSIXdXq4@N?-UhfdQeMu2eY;~n1!7yum|oA;_=ORHGC6Jx-YtX=K z)4+awENFE{9wzOrE~*LMQPX?}-xF)$-87UO&6dWJ)7dDd^}*zDwmm|VeFeAPtzUmp z%#%|9XxK#(FhjPw#b2x1!J=lhn%p&P##+U>vxPm6-rB;`czSvFw&+ilw?Z_inTWb1 zp%>+1B;Nmeep6-eB~$#WH2gPT$b~zSh9)DC4a=L$#k`sizRR=e7;BbYS4X|cd?BV; zfnRw#5q}eZ!kD86f1JvXQ^P%Aqrnf5P-c>e;I$5TH5Q2(jJNYUGe*Orm{($v4ae{a zqw7jcP_TgI$>-(qsW|qkwE@n=ngwOI3av0%4z|Lcvx$w30ekp~CePycbQMWWD#X~# zdL{yOOsB8{mI`c)7uepOQc}}q*AZt-AzIHrwCg%r3(;zpq;c||W3;#;)TmvMwndOO zvR?}e#A^O0@^EVCO;UsNnkda3euz4K=L{O_E>ZT3O`=d+mpUWN)s`}fJ;aMDZ2dNm zb!?8NVUCxBhKYEDqjT(KaMRIb81bW{$%yT~$;5i#gQUpt`W@1p6kP8I5af5aQG5co zQE;E7$@PI?6&t`5xDVGlK7m3UU;-cLMXzlKyEDPb3YfG#l7b`#?L8GHbaIi~$g&7p zw$ylvKXdnc#$H8823*a#o(u9o-*Y5ck_=~p+430WZ*o5@=QLK zbfd2|NjGNIwTN#622C(u18g~-kH*v>!d%a{Z#Xm8@ZMN7(0|qwZ)#s?TA$@BR~?>VxqrCkI*;F zXcZM^Q+U<)SV7LG*15~M^4KUB7s(T)rM7wEtv0X<8ru#Z;A4)x0nA6fi3_Rw;UYPJ zAIaCKAN?&CARNo0H|+s34D_Q;(z;zpl4BQos_hb7q10?dxmvc7g8TTG(7u`25aL>j zyM-XpHFEta*&=Sg03QgSK&;P3&?r2w zsgx_))QIV*D|JWwLZ@-}0`UuJL}avmU>GLOf7z35)TQDFz!1M5&5N=Umy2wYUt^$~ z7Z=dJ$EUv>mu6{~5QhUDUj*v*dg#=Qc3rG&G$s8?$DVk`+=PO?$*4rXV zxf4cBBlmS9b(l{dv>8px+vQJ4bRsluxR*>!GvmKe)$ zpw7qGthgJe%BXM083gc(9TDCZ0o(%ovsoJBeqI(DKogLk&a$6qUq>s&fvfxA+3h}f z#zq=&C~43a59;bQr-BDZELFoVF#!m|8^ik9oF`PjFr#kAbnU<@OA7`x-~}|$6emq{t5$G z54WE1h_<9j+E?vCs4@&Y5PGTV2Xe4+>3P24obiYj+cXehw>bH$w6h-S5Un9wGvphd*w{ zk|s!|N{02uBsy!8H8oF^X6nn;(5#gJ9V!N%%j$4Hut0MnumnRv2MqIld0`t=jc2on zb6f{qNuEtt^G@++TGmMn4=#pKD>>=m`f`XBjzYh!7I~E|20zPRzk|cWZj``eE#Qp(t!4{Q z9E<^G!XYJ&HP2{LNQlCb=2N>$%^8ts=-wUB%odX5?;Xax1;&isDuAc5_Kpxv*=#AN z-Zfw|_DUEqJyh5Bw}1|@1({qF81ic@Q4^h<8Ozh`ii4QXP^4On$g6n_1u{NeBy^Nh zNPVHS#(v(!L)yZScDElid!3iD`_q1071`p|Sk-=@{(50h-?@6Z5#Z~~vUqHo@)^&U zhJM%NqjAm0ecR(Y89dg&#JjT#OG_NrIKgJf=veVP8rfg=4Z ziV>Ojo-Sb!td*UN=iNR51m7?EGE4S*uuC^(6N2VF_H-4Y`mzODjqVnM&YTOkb2TRM^*_K5A$S_OH??(I-?+CleYk~|GFGlGpvE%Amz7yE}2R9}gexjMxZ;Lp^ zW@#Lvcv)y{NJJ+(%YFtX9Xq9Cr(~sA-Hx5YyWxXmr#KZnBzB6U_(KTOyNl00fs4-^ zucbNmp&$<%fDVYzw~jcV5C?A1`vS;LVJ*?IQ)nZS0WowHlHItdVKVkrM@}JoMYdcx zmc{p1+Or(&*1%7go5I}R;ijvYhMB*mKqO;@lLLG{H^rqMz3 zp4hd_6u&au3k-;u@S-HH$jjQGVmuosrbNQpHhC$Ib@m8vB$5naQ#*tj&tXPugfrqy z7Y7+TUW&+Pm(y&P6;&y!51EiS2`$I~^vL1!H;c(|l(8?xJ1$CzcZZ&KycAqQ=B?d> z#@f5iOYvVeK~MGilc3Y?CbT`g2~9ODV;nIMnohC48kcbXMQz5}hr~|-(qA>qC4r^f zf~3NPTU@pYOC^}G2?iX`NaI`>39e_{J3N@HxHVG+KZBMd8Fn!&E;9FHekCr=8r((Z ze+006pZ^NOhFzrN-DK`ZtPC{Z&sVN9=;cy!+H$OL;DDJ^7mrMG8)D1)Mn+~h`w-a} zo6xzd%MJ$eU4#k)lwLofSB(%S20i5u?H|-Fn|TN&Z|)IUrj{#ysI2 z({UVo>_>bYQfVKehC114XZ*v)v|OE%r_AJ+1^v!e5<8vj z@#VYuO6ZIx^`Tqj>~jcTqZSKfJZ&R zt9G2xMjRfS$+XRbKxaBW(*vn5!W~7~nPW4v0Zw_|hG&QG(f|3bQVW1%k7NFQ>7| zHqqYZ;shXHa6@vF$|fu1P>Y}q+`ALxTjySaWYu_Kn^cbHt5>hCMEe9MW1)RQa65{V zfmq+lyWsokW_X+$KDDcN+;NE(bUOrtJCc)J#bCr3r5vnv;@b z=OnpA;P7#D4Yx)oTO=$9Js~F2sg_E+~ z8!(sg*e4;v(?)!!xCR!+b-6AyCIO!NT=em#!$=)$32E@SaS2>B!R(E6*dt&$QQNJ_ zQR}~{=u@9y7-{t?pHwXm7G6tL%A*h6h6RNI2HT|@$M{VVZj+POyU=?UqBXTdX-Zj( zdNP3^hsbS;*Kh;e$`0mZoNQZ#ub3ZkUbD$YR%FZ>rU_ZbU)Y;W?j? zWiT}$Fu5acpc*jSwn-yO8I?xbdk!HR=|oN45sN$?4LV?6EHjuAz;k*f+@mr2AU{?)Jt?*KJs9igJ{{fX_H>_c4|tHg zpGZ{?i2xL-!oz|pI!e$dKnaR?GR@Qv4{_N5Y*EyLmQfZI;=n8TK;tUG){)Cqxv|3$ z7R=Qiv~n11A#Y(`vyt6ZYS~f;LKccdAvL>kUPgPCgU}FuHh}LWa)*A8kX^j1B*8n( zzPVfg?4(@v>8>bz7UdHKl}!+fJjYJf$U6B}^|ILw4oR0B*;i}%Mez!9UoucDNsuq^ zoM#kK1{%>(M&H(+P^L}3QAEkTL|{7xQpZ3lMxuWm8Fm>7XdiH7rcMVTb4MSDl;`PbO7bgD2yB%Yo$XGNwJejLC0e#zbR~{LA5JN}#!98b2Mp z1V+=l;rTSvFEo~(K~g*ji|5~l)p8+Ut9zX2(VOqS{qxs<`PyLTh(^k!G9P@AJf9cu z<{z`dkec7}XCO|CD%s;(k)l|oE&jb3@*XT=GyFYX1jY92Q22TgdyK_%W!q*(p##I1 zwVp@y^c1)`Z7u$BfwI502P#&Opk(LK7CX*xjFj zq|Va1IY^RY6MD)FV|%_{;?>x!ObJS|%?$r9?S-aTv7 zafE#XEknu?60}3!Xa+s35n&X&V&on=7;+@X4=%Q|$eKwBT5{&HNJcsL;m zhf5ZyY%Pj;+Ind$aa>?)m+2)IP;8C3WBAf>Tv`T^>vlZYEqJil=>j08w-UwmO^@?m z`TVF}+GPZ55V`PxzN9Bl@8}}+#fSp6sj8+%Erk-8x|5G}Y#0)JjaV;?DCJHnHI3ZY zjnrW>xkfOQ)qrV?OX>2$P4D#!_i=_qN>JHAk+m&k*85bNM(kjf%kGt$;tkF?+vN>^ zVT;@jrnI@YK`6c4G{`jrCw1<<$0a+GFb;j$SYYHX=6GZg*PyQ^;(R%oKwHBN*B8|X zk(cnV5d-%Kf?EB7OT9> zPKAPD)fZ^A+AssFLh-9KGCOF6MZz&{qZ8ax0cW#e@8Z_qH;we(Pl6?^hSigUx+gH! zUJnda?});mAW_)#N1Ct+oP7vqvsLXjK+By zFDBwMc#9!>&+O~*%hX200_Ub>F&i$*55uXLRNGfJ&?6tmWgO9vP7sEb za;l@EXu6Q80q~xn469uY$&-ZDR1Srj_JQWifXnqwbZ- z>hi+2t1vI2Ugf$vy6QZeu6$ciJaKd-gn1(R?|(gqkDbWzXTFg7tZ#puMWh#%zC!^197cl# zQ2qYNGyLM4?vgdLfa35LES3h~XEX&RL@6=0Yiuj*id~MjRvdT7xWIdc;P(xEXZn!K zcEI}67M}ZSJ47ncsZTn_Gv)EG6Q7e|HiB7h=*EQoE dd97};BRi|IgpT#ZO?2gB1=kjazq2n%K7XJ)?MMobTk%AGRD`Cr9C0nvh#g>rlsTs)uTDucmR7MqUGBjdA3t(+hQeajniy zyVp*2Z%@s1ocK|gbm&KAZn2uRoc(>LY0W6}XLjhckDWHnBvBT7x}&@(OkE#{_r~$m z+e`1KI&m0YwK{dZPwrTkYpPX$GL7O??N%$ayrp)=e(H?kC`m_&f%(%OJ{z zZ{5M3nQ6FFA8hQ++Iyi+C+?Jy?Ff*k!-(}L$ssVQ7znhN0#X!>1MQ5XzzxSv6p#0K zevpm!%o-UmKR^M`gR5Zu<}6J8iI&Z@8aoT5C9vc^^wbW0?o?~lDrB3mtRU}SbnK7r zReI~D`0x`;+a4(&BS|(I`JS)CG`LsUw2?-QAwD+`F@MK=Bd+Cp&7JNM3D1R?EajaUcbm$_vT5?3W@oOx*$YmvcFk6?9) ziUz-v=B9z`=?Pd@1AXhxd|0QWE_g0co*NRtfd-H$hJQpMB=p&b9K+H$6GvU&>U$-S zEr@Xz=(=*#H1-Es3Y=~@BzUgp=>*V0XB-8JtT P-!XlTdX}RWt(Og@*_q`)#;q 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 diff --git a/lock/grpc/types_frostfs.pb.go b/lock/grpc/types_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..30121113af4b33cbfa686b1133950109160d5380 GIT binary patch literal 3844 zcmbtWZExE)5dJLvimQOOa^^_QK6=Q2HOYn+X;Lid`XLQgTBZ^<5^0c>?JUTD-yKOw zmhGf_3D71Y@AbLo?wIFrq-Gp$xa68yK7;8!%(b$r*vGT|8?|3*Wo&6OI6jB7^Gi56 zes`J0@thTR?1n?7in}-#^;~HSX&iksNDD% z6#tKzyfs4hn7Qxcx^1Req3Zk(QCOt~`@pRhg~>Z9)c98M71z#xD_%2E>BdPB^0^lw z*`*ftd%|8OiAQm4@8=v&v9@5WZVC$zarA-LQ?3nMUGGsPvh(RTUf6fX@RfW`lG@)V zU*pF(UNB8`_!HU`vyTMa2d2#}t1uFPLrC|?#VD1c8g0vdl65D&ElWPLb#rLZ|2!eP zZmt#Gi~%#xbGWcy!K+)g;QiH9NT%Z_{!(ciy7U?#ry3My=e} z|08|<#%+qB&UlIZ+HwD}v1yG0tL&r}wv9Ti5gcQ1n00JQM`Q+l9|B%_5>hO98bH7g z!eFCXL$fvPb?v(4;+YbDzkpQwwxU=bc;Q*_>eb*l>v@diL76v>CzyU91FCKyQD?u* z=UmPLAn5@CLA8Gj74Mp;Meq5Vcj8!(r>ovcwMJ8;i>~e|*BbDj(hf5kEM);bvcFPi z9Vz70%6j5gT#|(m{2Wrok1?6RdX@zeer27K6T+Va&(Tj?Sno=y%Vh#DmxwN!bx=?Oj*hJoPCumPMjzrJ z2x%knx7HQn=w|0yy+c=b39Zk&ogOZF4~s1ij;Eb1M0qism+vpm&o=vJW1T(SEMXjx z4O$6)Iy!(tgDeUEuV8{th`slGpeHae*AVM*uuOD7xj70oGNu0-X zdEQ4Y5B+lO`sYcybQ1q;y1JrM4|by!y9(b42(Rl||5(gU=~eka z(`N!C?YPsq>e)jL8Q7yeO>kOmwc@rS4$QrESDq*4Qq52Kf>*>|A+vV|x0iPNoT@+v zXGj*LJh6d}dJQ^>Pz0BNX=*-mQta=1(3zGii@hrKEGSBiKP0y+&P!@s8BCLN*-DQP5#^kaI_T zS{W_LlL-pAeuyHs2x0gXr(1VX3HNf^aoZ>FJHYqAAb%vLbB(r2Y_jc*;M_!OBfevW zkc0~UxB$BSLSJJj!(9hj2Z8UR!Db>AXQ~g_HH-%-RM%r4%-~rsOMSG1CMdAZ5_;DB E4Ghb}WB>pF literal 0 HcmV?d00001 diff --git a/lock/grpc/types_frostfs_fuzz.go b/lock/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..cb55151 --- /dev/null +++ b/lock/grpc/types_frostfs_fuzz.go @@ -0,0 +1,26 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package lock + +func DoFuzzProtoLock(data []byte) int { + msg := new(Lock) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONLock(data []byte) int { + msg := new(Lock) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/lock/grpc/types_frostfs_test.go b/lock/grpc/types_frostfs_test.go new file mode 100644 index 0000000..7c69064 --- /dev/null +++ b/lock/grpc/types_frostfs_test.go @@ -0,0 +1,21 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package lock + +import ( + testing "testing" +) + +func FuzzProtoLock(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoLock(data) + }) +} +func FuzzJSONLock(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONLock(data) + }) +} diff --git a/netmap/grpc/service.go b/netmap/grpc/service.go deleted file mode 100644 index 882db6b..0000000 --- a/netmap/grpc/service.go +++ /dev/null @@ -1,116 +0,0 @@ -package netmap - -import ( - refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc" - session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc" -) - -// SetBody sets body of the request. -func (m *LocalNodeInfoRequest) SetBody(v *LocalNodeInfoRequest_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (m *LocalNodeInfoRequest) SetMetaHeader(v *session.RequestMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (m *LocalNodeInfoRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - m.VerifyHeader = v -} - -// SetVersion sets version of response body. -func (m *LocalNodeInfoResponse_Body) SetVersion(v *refs.Version) { - m.Version = v -} - -// SetNodeInfo sets node info of response body. -func (m *LocalNodeInfoResponse_Body) SetNodeInfo(v *NodeInfo) { - m.NodeInfo = v -} - -// SetBody sets body of the response. -func (m *LocalNodeInfoResponse) SetBody(v *LocalNodeInfoResponse_Body) { - m.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (m *LocalNodeInfoResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - m.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (m *LocalNodeInfoResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - m.VerifyHeader = v -} - -// SetBody sets body of the request. -func (x *NetworkInfoRequest) SetBody(v *NetworkInfoRequest_Body) { - x.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (x *NetworkInfoRequest) SetMetaHeader(v *session.RequestMetaHeader) { - x.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (x *NetworkInfoRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - x.VerifyHeader = v -} - -// SetNetworkInfo sets information about the network. -func (x *NetworkInfoResponse_Body) SetNetworkInfo(v *NetworkInfo) { - x.NetworkInfo = v -} - -// SetBody sets body of the response. -func (x *NetworkInfoResponse) SetBody(v *NetworkInfoResponse_Body) { - x.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (x *NetworkInfoResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - x.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (x *NetworkInfoResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - x.VerifyHeader = v -} - -// SetBody sets body of the request. -func (x *NetmapSnapshotRequest) SetBody(v *NetmapSnapshotRequest_Body) { - x.Body = v -} - -// SetMetaHeader sets meta header of the request. -func (x *NetmapSnapshotRequest) SetMetaHeader(v *session.RequestMetaHeader) { - x.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the request. -func (x *NetmapSnapshotRequest) SetVerifyHeader(v *session.RequestVerificationHeader) { - x.VerifyHeader = v -} - -// SetNetmap sets current Netmap. -func (x *NetmapSnapshotResponse_Body) SetNetmap(v *Netmap) { - x.Netmap = v -} - -// SetBody sets body of the response. -func (x *NetmapSnapshotResponse) SetBody(v *NetmapSnapshotResponse_Body) { - x.Body = v -} - -// SetMetaHeader sets meta header of the response. -func (x *NetmapSnapshotResponse) SetMetaHeader(v *session.ResponseMetaHeader) { - x.MetaHeader = v -} - -// SetVerifyHeader sets verification header of the response. -func (x *NetmapSnapshotResponse) SetVerifyHeader(v *session.ResponseVerificationHeader) { - x.VerifyHeader = v -} diff --git a/netmap/grpc/service.pb.go b/netmap/grpc/service.pb.go deleted file mode 100644 index eb9186260cbe07e97af8a5e9cb61f03e3f1939cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46017 zcmeHQYj4}Qw*74X3Qa!@;v!XS=hfz-7r4{cEils-)6T)cDT<6@%ZYAn$ybuo zgRmqypNIZ=G7sW&KS|H`==#}ehMKVre<1z$Oduxi*^E&;~zB7EvB9mihI)zsZ~@L7GNkrYO$?4=XTT1UaOI z@BMEWOvBWJ6oLzxx5@xjk{BGHC(!F0JdRF+Knc6OJPqQE>N|+1-ZTN}aguw%Y=*TZ zM;Ts)lND*`_x=d;K&ZKofZ&TzDW4l-9hYNWK=;!NGIJM)`WQc8d223ETh@8v5-Tm5 zkQa21yu-R{qO_!$*@mZt^f4@P^$X%Y^S{RCW+!aOn0sZ0CmvOf14+1D4HYe z>?|UrJ5^fAVYv zJ!rUMijl5B^EU8pMYMkX)w}Y3dF;i}oFlhs6hH?A;`bz&s&N>2k4xF^NI|H2((j85 zBUk(t$*~u12jqGhE}{0IWTz+IU)dTi3oP6AF6qua|Fj2BQ1tVUxs!Srq3CP;NDlClp8r@Vgd3 zVb_(9y;V;_gv+FL0syEjK^&Dk;Jr$7DPSZ01dakW*DauHI&fB5qKdNE0+~brM|8zQ z;Mj%in9NsGgo6Kh^Agz`axM52=TR$1ftfRg6#RBb%2@y;coM?IElgW5j>3$DIbq}z zx7r3nDfDlhq6kej9EDqz>FNDVAPcJmNyxTHQiO?@-vvuyV=dKYc9F?_e@1friro{RnfY1&Q;L8KN?qIk8Vm%7N|VKu)%_&RkokmN5U6q#xJzSUyGh1+QZH zvUeGUpBx)5KC_uur656^zac847+35=2sR_hjM7BdzYQkC8&M0`rqFj5#Nz$uUQ4n2 z^mDI;_v+O3zL}#YgE8B5PhZBjL0`;)47?7wi%o15adEcqoVB1=?>uWU-PxG3m|X|3 zfg`tLV7lyfcV(>e6`OX2teBU-oT->H2Y6GYBpC`tpoyit(g90xXjf^)y8g}?3Tz|u zt_Tql#UjBi@P1Ia(K1=VPI{bs;WC+A;4VAeq>QHF!h!vN%{~7w}|6$`5`N8z}G;)mw4x+uB1phevT7#>=Nain~Gp z^X53VK}mk@rRY!aTz(gKgeYp3>iP<7#7t8wA2FMC&qxk#iIJFN>57xsB-gMKXP3@- z3A*=3;3cL<+b|Qe_f|Jp4h(K$GeBo2W{Xbvi7ED$cUl|L%)on$n67U{M7FrCa#&4Wqy-h+g`0FwUKG{k zCd$_LSFBY8qj&HZHqx>P{4xTg9Ws!cD;}PH!P6Ra_(k0J(OPPcdwjLKKk9vcr+FsS zJDYZo_D8pY_RjHivQDj#UWNH}-8zSTboHHweWzC&BfnF^R@be=U5`&*w0-Q~4nFEk z@YT?Vj-CAu2Vvlt}1(WwY37Qm2lRgwbHhGxIX?0aIFkz8+fgWZvoh5zs?aGz5Syhw&K=JAzKl# zRm>hq%&vY2oA@|w{RwQ7%((=+8j6beXnESYsalC#s8{}8c?(oFvgkxSEg#CRI(Xe}HeRvzt>KIKYxayQ$1*+AZI!9D=@|{Oihff>BsiXf^v2-l46aWSp zlXzs`3(nx}2I{F1_d}Mv@9}lnuHw3Sx(QD=sO|5oe;6cFp}#Q$u*x$_NM0kwT3Z*} zR20kmHDc0&KebmbxLS4(hmUR@4mH})%|@_11-0hY#(=1qM7=skMD+8Ig@}q%H-kh) zz*aGFUt(fG^jzgf>{7W%Os~X*YO+_hv-3UJa&VBQ$9l85Q06d3Z+d!T}#8yG?K!P3+K|As= z{L(F$ss~5DGW5{qCsdYr!JK$Un|L@E-b58M?7{(}CG$Y|1(xUhFmDa}gQh0U!w)M6 z9$YRT1J-6R3&(Rc-U9mF%3CYe(N7!y7T`~l-vWlkxGq>9{8mT!poxX+UBcTgpI5#W&s*YsjFevk=VRN_4gEg$Z}!SDczGYc zvV5YH&!DrV+T^nqPgV}DG=)E_Yp}Lk$TlcXo(6~#1ScA%|a-BvQM2w zn+D?>u|H^hpbQms;1F`=F^!(bDrD{}BdBo#+r_b=F|i13+_u=z2-M)XZD|@0Hsv7& zpGQy(2lIi$%b{kA$nT9Z$7UR55s#ojwv5R+Gg3dK#1$z{q7NpNhin!bI^rPHg#*qI zzDyl>WCuJNzRIagZ4Q-49CMXWgfxE~kOI!)ed@**4Osz;P*ifBjL5${f-&X3_?%hEzl)-y&ySP@0qjBrB4}h?P0*;biAxNBR!pN27(pw*7M#Ps zI}4B^SCO)$fQo|Q_khvgaL7TOE5H;H34)5kv7~^#MjmV;h@*8#?M1Z6tYa=iHjdNb z5mz!@;38@mIE z=BOBon?y*2n!Ey|Bn5g{STm|21x$sH%m=(gY&0JTzOC{GUbGrhql+&U7+hb;BNDxFA}E#2OooDHQg$|MR6Xernfy8&;_3_R1QpE4Yud7u0xoQ!t33A}Qw-SSVq=6R zD3<~VcsYWKr6~HERPGaYs-<+qxyK=;Ag`@NQ9*SW$CNDmb46M>dT!#2!=M!;lCsYA|?=H)h4 zMx*jR$TuYh?m%HZlN$y8aGZD|azG2WZ;_@OuRd`E98%8iV)+SH3t~$SY{5CyS%fEj z>+-YAZmNTgSD!cn=WdUU@1tU>TTyy-kwXO=gbvkks4J@krYTe)nsTx5G{Qy4zjL0j zAWmieobiWi+r801BOuWt)N=V*+Gr?lwfdwOki9BKx)vS0`aGjb)>fZ1N-IW@i)gS7 z@x2@w7h2tl6BX=}AJq}mqCBXn0eM0#$TS)OqbcKMn-s*+D1EIfPE^1dZS^3E_%a8U zF<@KNnh=UPi#RDMO~rbGKCgv(RPb|^DZxhE`(S5M@WJ5}1InL`5g!tv0`N&eTg2z^ z^8EaBm01};EJKQ)xjYd&ncvy2BNGD^G@ZMSYa4suiXlxzCbYQ-y&wrSODIa;YFHjo znhFA-AZtMks1E9w0R~g)Y=vcLV?||D;2LJdx&@ua6xdL_CXGf=xeO9_|9BoIr*Rm? zF0i3sZB>B^4w;y6Q>G_0(~7x)DG5(IG#@bXG~q>%EU4f>ZUf`MnfW*-nPLY5Jzlwf zF78Q?iQy_CMz;G+U-^ict&An)ig)^FfU8bJe=DU5KqPRs{3_o4!^ zvZc;H?*xKBIMJELi3c~BWs(OwpP4BJ930ZT@mdVB&bkz%EMl z`%2-oEjpEU^6!!t8A~G0`sSE(SLWo_cLL8C{S_WJqI57<5*4ULS=4q8Xtp|olsVu> zPgJ7O!Rkz>0W<}QMuynZayIAh^R0z;dzZGB?Yw_ zZt&m;TI|h{8WE>vph7MptJSS=E2^OPn}CX*#HherA$K?{kOITMEoKF!&aHO^NdXU> zbHD3Z0Tl@E>lKI|->3lB;)e>vN9_ZMMo=!PLf7Vobr*>|VLHqe%eil;ZxSb%vQPmp zkE~NR+Ni{)iBP_6v`?HI3YHWwVR6txaqmNA;G|NWy{)ttjDr#;1>}lqI?mPJs)j)U zcm)-xHQdB50elKnxJDpj(0Isf${81zQDRou#}TObE>-|s+ay8+pR`8Pj?~yt zC9OTXQ!3c(VMA6kCLdTMgbKt3PDiqlKVjQ9j1cb(@GX{(ADiLwWSBAOySTghWjCoI zK?`?L3^=3=2|Ph6(>ga@3msNCwW*C9Dd3FeWF_*V(O!LqLeU1mai|Y@7f-p@28p{q zg0-Cn6j!;?AhL)?U$_N(aSYntN86yzaRglGZEe@wsAmq0fM*Dhj0!~N(4eftgbw2K z_O(JWaAl4GXB&)C33B6X;ldQ`kBqRw9EO_d`(_&*B7f>il19+pvuIs2$J%4C!L|*m zWJJ(23KbM71&u^T(UjduMkztA#v&u5Ocz)Oiek|upI!dI3)GFT`oSi*^5q7%!Pde z90Bi=RG%c;hg)uNHXjd+?eu%i&Wyc|C!v>J#}glaYuf8+0B=Tr-0)ahf6(vKnY(5d zz4+J5H*n^TPqN{WyJp?ceE(^(gPNc_^lR8rjD^nNMT_O!|EK>XSuE2q%gB^w>QTx7 zPXEDwX_&9lxS?~fpA1@!rbTxC?s^$!;P^%GF@&$sENvEFItwP@=Ns_c&VAeKItM#(G#~7G%0Da;4l}&9ySnLnrjOqzrje$1dw}Vk!$Pi{|0Y1ab|)k8$=)1i)M=p*=9gZ!JG~c zEwattcEPOFCK-%=R43RpS&Lx#mKQCPLGs8}Z(y_8T{T;~>aZMz+sbZT_?qeG>2l(W zHxZVvG1tsSz(DC*^<{vs@B&7&E2f7k6khKb&7w(=Lu>x-^+Grb)yi*8sM%E!&f{>K zjKZ}tEQPOkHKdw~rOhZ+tHO1uW>+b_c(J9Fg?`olp>(Yl;ZS)dU;c}7| z%Zg+8hNhDoX5-U1ScKk#|86!3ikieFBKpOG5>{=CFb_^I!eAPvE~RA}5q6Ym-S3Tn zxPvyW`eOG)?O$TSUANO`%UYnps8=gcyIuh)?VYM&(Fm3%piisWN`0-|YSuhHc>?;h zYOd7R(y^@3=2=**qGqkqh2~dfRSHn{8@Scdi)U()sa7m7HMMf6D^F{{LXN7XGfA7x zm#{8JUphdg!a7RO)N#TW7kCU~2$fYeOAKJk3L`Qr6Z}IG1r%Cl-#u3YD$A z>rPw;?AT0g>EDXn1uB3Jw!zTa8xvd)_E8nDnuPN(5cW7%dbIjX^}w@ z-;V%OKg<-MXl&y(kSzuR&`>}MUZ5A@)@dqbfHHtmRA!?!pv)FEsSmEzYl23w6UJ~o zwy_zZBupMB6Q>O^>HbQ>>nee`?4KS`Z~ub_oOo#LC5I%P^*`6A$c4=5R_ zsz8oXmExKv+LY#{!ZDM;_v6Ep@xu@J7f);q?Hhk-LevwQ)Wjv5s zyaIR+c|1O>>{ceO-fL{{6<+0GOyB%ctWH|?BMH+G_JT#Ny&s;89olA5IG=i@Ci!OA zD2{U6gss~I742>s?GH<#^k(Jf)o)b$<*^5wm9z`Y+p+XwHe-VoEzeGA8x`OVZ6@Kr zlpCvm#aS>5pT)u199}QkU{_i0(!L*l@Sj~RlN2^qajP7+r7z)Yaf*G`T`$5v2kK{} zpqIfH=}a!XOYh{dcj-GeWB&`fqdC1vkcF^t#b4#t^RJhFmcus$6_-cG<>=qxlVEaD zHW{xsS;ZgY8Ewlq3^{}E+BxIS zoTEV`QOfVzGyB`|%w0&DgDzd8&2)DlZw|NSoV$=ZN1b^`quhdR@*R@z8jz2-~#lHXw)5LUU$*Ao<^{+pnaPw@!e1O zx_tclDp(zr>$G>UlKX8H&EXaqu8MGZc%od!7iue)doPkV!Q^9b9=-|kixc?5z1cjR z`=oANn{sRF`D(Rz7OxiB3E!$6$`8dO zJM=l+Wq-+Y~!1PaBa6r#h6u=NoCEA?6*xRRk5ukO4+hY>*FC#*;p>P3yTC90Nf)g{r7bD zTs;5=2bWlKDWv2`1m@`O>6z*N@L_OzD!yJ_hT6mgg>gY|G2E!V3g6XW6Fk8~A_Q5erw zmr;Cmia$rg!F-vC5&R$g^D0@-UWn0EludQxQ9NIr{+MjSuNSM$<+s7bsk-xdu#P~A z)0;0&lW?A%VqMil`xeqLO`}z;8(FVbi}sCdvS@LNRY450)V58am7xu7sE0IjsvE)f zg7n_Xb-lTm&Q{CQpQBl}N}}MqFiWCYdTL5RjXxIQU6@e+y7)4P7RiQ6;rN}(B3Sk| ziL$!Fvdm~W84k1ibtt}F&4R@n@Uz!2%x}a0Zo)MC?W@)0y-2fUGt0#L;fLYyCP>hI zeiK@m=?`e4?}8+~4i?a-5HH2}xwo;&IF1&RVgo-!%+Xg3OMYbsj@T;H!1^b$s$~aaV9nP`2+M8Ci7s{ zP~KcG?qQ|} zTFPpJo8q8&OOuNi3)+=fgj?{Ppl_u8^caCeT7}m$D>&g$Eyq`S#Sy4 z*^F6-v+nmuxrIv<59d>EXe9|s*rtE5fp6v z+568xaOcVgxRUdGujP%uKETz z)3d}5L?SH?%TP0$7h40DelE9i*}pV-`r~T-ZFmzdP`oIfzD{B5Nocu)2}Bp(fZf5R za4pA6wgz4qKoOXx>1G*T;u=X)0dMgLx?D6>MSSd9X-B>;DRtv;lfPAc}iP z0B7swmQZa@_}dq|n)Du%TRLgK;XP*0UlnVC7qZsS@mL6o%8L0m&K!zgf7rClSAgkUzPN z((uGd0+iUWp36otF`()o6*ifLv6jhX15g2h$c~h3lJ!i4>tSQ`EuBA<#9GQj zx&A5$GQlvkfIgKE4E6ndaQM(XXp&E~o^}c}5iPSH+^I{_QVJsR7Oi4BS$OtLU2wb> z@5;oC4lIp6pN=6V=0VC#0(bNaBCy*;raIhAw$eZl+VE2h&Uzv1oE zDOBC-m$KJfkloCS`DWWR+nEScOLuZKd1YNnISbNIyf_oEd*PxA0qOwP{S&czhw(CG zpvw1f6O=J7INv95mm+n&ZnO1F&Eu-@{WSpcnjSb4!jKhs2yGI*Oj2hM3|tb0z$

l9nWNeZYD;P-2IAQ{~ue1i$xOEEh6mC%@9M`!S$OoNaLxs-+f{o?FD zxP+-4u>=%_yD;agJ6RgorlKp^jh#6Kh!?EXq_Z1_@YHt4UD4m+qr$T+SUdn^mPupW zwFhM-jN1^DrD#vWo@X$XXs!$f^zf)+*Ta&7xr#BW1J}Xa1`=$La6;*s3+>GDCrnit zeU9v$92KQ1-?1E#%8ST8tL3p%yeJi)yft#s)OBJluYAR#P2}Wj1D6zSXrO%M18{9; zAbYxo)jG`44G`=`Du|Hb#0!KM>9@tT@h8IKnztaHn|~1|tV+g;*64aF}Y$WUFY!qsqPX#*T;f6#d%^`kF(J2C}w zT9-qHj{)8}V_{Ym?a9Xg;V}(c0C~z~aKG&o%TxX25g6L{B%+5=h}jEiQ|Bn2cJ1QO z?H2Ps|72Rzg2-Vc~!KXQ5XI1N;Pz$?e)+tAPl4bt#r^o!8^Yl2$3tw^}65Q*ar&s>Y4zre@r>ADX$3WE6sy<<+o>t+w0Jxs3 zx6E?`kDjZiJ=yHk1{*nom%yZQEkM3QW9vx;=&@J<)S^%xq`it+NWpGYM7?Fyo#k4?rd5nRHdQJ?$99xG*(yZ*Ud|rtw>fD~Hwy$r>!KP1 zhF8MmeS51?BU`L3kV<;l>Ws{m7eJ|I%PLsaN3diHa$hQ_SoFn8Re4)mDa#uus9O}q z;^8Jc?-oxsJh{Vyl8smf`P(Ckd;uF@1*~f!WZEIO#E+LfeXr3$0(zpG`0)_%>Yl)d z5H66jwtuU-4S`Sk07a<|bev=Gv0@Z()PTu2dpVFSC9?Cf1i)7OJlT=ms~n*`WtvE2 zTP(_T!x*@Ak`?zEzl6oIO(dmS`YmxrgWNe7|0c|CSIN6w92w+k$|B0uT)W!p)o6CJ z>SmS8Xs5y0wbZ=F!Vyuum3f70lXN4+|Hs3c8& z_^Ue}Sxlh4xA?zKu*b;&I(z%XtDbT3M-E`?1u_=z*%qzX7LO3@cxeZoQOywtFq6f% z7g%7a-gP+WV}XjwZ6BoBnr-8=Tun27>q9eD^Pr=$o@BrtoA-wSiL~ZmP-ZPgGANm; zN69cK)AK3O3(Dj_q715k6baWuL+!E z3$&W4z7=L&tbeG;HJ5a2LP7ocJ9L;m8zS)f$73NlIvxi`=cv?@hfsU`4jU);XdFAW z{ioxwGC8?&2jr+Tyt`*bIJP=Mc#G-R0_0+YjJs8*2jsB6NJ2W_4-ay%&Z1Bqc7--Z zj!Ce42LMSht5a6bq@&YRm}*s+1gloTj%TIZ%@N;nU^nSd72C7QY*_&?^KOn-VQuCl zI;iy486_o|$sG2WW8Dl$ULi)ZHEcT(t>)GVj_ObyE=GQ->_h+8Cx%t1@I(aas4 zREJ$}lGm`}kDb=AjE1sOP4nR?jkB=n0#E()5oU9(pG|RE@U`WnvsGJXSGlTYC8;C> zIlUfsPSw+a7{R5d1MPwiq`d$5`9NCHCrb#@3LF#K&{KjwHcF88VzW0N4<|^f)&eiV zD6w;(1UqpM67|G{4$HMEqYm68K#o#zoCNE12awS7qeK5Fm>gaEc&C6R*;^f3>S@q| zq`f>3r?_wNCsEy5t}!o2FHr2OU?uqtO_NHxiJaWfZTW%FC2jhtK~g3;H5+n+m>SkG z8G}aNx3?;FvBlZ}ilmXP%y={T?rTpLDYciMASBx_dS9iQ+!MD@lvgjPS`_8cI6~SL z4iH7{Swf}X9>cxmqh<+dmo-u1{;}YmCqzMEXQzpjEbz49VXp)IH85YHCdjagd$;%) zSbno|MCwlxiKouP00?=u{~#C)@G@AR$H6+iUS)6P=j3Iu1s`wR%uCo)?I27AtZ~;OyAHRf9hA&~VXEKgp%!$!p%Tcnf=@AQY!T{&bRJ z35kqXy$n=OLnyYICn6L}$O($MuJ@RdVx`ADsids`9UfLv*1VsN;7f+9MvgmWH5;K! zmP0$Tq)f&GAS6_XWx%gaK}Up(W~(^O#5xJ#fDi}uq(5hkodIl{yZ2X4=>LtI@31AHVu7teX8#mLJmU$JNtyYVfOONx+u zr}(>MgvjX2@Dc_RrKclIz!@~s9TTPDK^Qmd&f?AOknYkZ+Tq>)Cd`Uhhk6&AIAH9X z3%fOWq4_x`;4h-c5>v*&W!R~=shHKsX1 z9{1!D5WsS(9Q&B5dsHwOQ?UgYCI=GtsIHGLf$?zO$x%Cp1TW+d+W$EGrQEDIU?}Y5 zFCt75?Ur&!R!hlznN43M$tszTN1J#VBwTfN>dGA6FnV|%D4zdun?zZd zOn;%j$YkJMcjBd7$XMl}RW{7)&PAh_rJh4(bXZcwq;1ReH~X^JC}rTQ~UFnR18fvaQ)$;E8v6d}Dv0uYB& z&cbjWs0;w2W+WlqFyM(c&+Pihl9J_Rx2KkrcHn0UNh6db$zVpp>(rA6gx!>TxeU10 zxGJg3pQP^p?2=NO9VX;@P-yE#PZyfs|1%6O0q0ikVh~b5t^vJ+Cmarh{Q)5C+~)!i z=oQg&y$F|KoTc=}OW_6mC#Imc4@N>FXjNhOX{o-$2vZ@Xu6>{}x34z%kf4f*yyzl6novWcX8 Ov*WVjQ_vmJhW-yFn?C9Q literal 0 HcmV?d00001 diff --git a/netmap/grpc/service_frostfs_fuzz.go b/netmap/grpc/service_frostfs_fuzz.go new file mode 100644 index 0000000..ebb59bc --- /dev/null +++ b/netmap/grpc/service_frostfs_fuzz.go @@ -0,0 +1,121 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package netmap + +func DoFuzzProtoLocalNodeInfoRequest(data []byte) int { + msg := new(LocalNodeInfoRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONLocalNodeInfoRequest(data []byte) int { + msg := new(LocalNodeInfoRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoLocalNodeInfoResponse(data []byte) int { + msg := new(LocalNodeInfoResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONLocalNodeInfoResponse(data []byte) int { + msg := new(LocalNodeInfoResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoNetworkInfoRequest(data []byte) int { + msg := new(NetworkInfoRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONNetworkInfoRequest(data []byte) int { + msg := new(NetworkInfoRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoNetworkInfoResponse(data []byte) int { + msg := new(NetworkInfoResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONNetworkInfoResponse(data []byte) int { + msg := new(NetworkInfoResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoNetmapSnapshotRequest(data []byte) int { + msg := new(NetmapSnapshotRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONNetmapSnapshotRequest(data []byte) int { + msg := new(NetmapSnapshotRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoNetmapSnapshotResponse(data []byte) int { + msg := new(NetmapSnapshotResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONNetmapSnapshotResponse(data []byte) int { + msg := new(NetmapSnapshotResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/netmap/grpc/service_frostfs_test.go b/netmap/grpc/service_frostfs_test.go new file mode 100644 index 0000000..5c9035f --- /dev/null +++ b/netmap/grpc/service_frostfs_test.go @@ -0,0 +1,71 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package netmap + +import ( + testing "testing" +) + +func FuzzProtoLocalNodeInfoRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoLocalNodeInfoRequest(data) + }) +} +func FuzzJSONLocalNodeInfoRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONLocalNodeInfoRequest(data) + }) +} +func FuzzProtoLocalNodeInfoResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoLocalNodeInfoResponse(data) + }) +} +func FuzzJSONLocalNodeInfoResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONLocalNodeInfoResponse(data) + }) +} +func FuzzProtoNetworkInfoRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoNetworkInfoRequest(data) + }) +} +func FuzzJSONNetworkInfoRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONNetworkInfoRequest(data) + }) +} +func FuzzProtoNetworkInfoResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoNetworkInfoResponse(data) + }) +} +func FuzzJSONNetworkInfoResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONNetworkInfoResponse(data) + }) +} +func FuzzProtoNetmapSnapshotRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoNetmapSnapshotRequest(data) + }) +} +func FuzzJSONNetmapSnapshotRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONNetmapSnapshotRequest(data) + }) +} +func FuzzProtoNetmapSnapshotResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoNetmapSnapshotResponse(data) + }) +} +func FuzzJSONNetmapSnapshotResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONNetmapSnapshotResponse(data) + }) +} diff --git a/netmap/grpc/types.go b/netmap/grpc/types.go deleted file mode 100644 index f4e90f8..0000000 --- a/netmap/grpc/types.go +++ /dev/null @@ -1,212 +0,0 @@ -package netmap - -// SetReplicas of placement policy. -func (m *PlacementPolicy) SetReplicas(v []*Replica) { - m.Replicas = v -} - -// SetContainerBackupFactor of placement policy. -func (m *PlacementPolicy) SetContainerBackupFactor(v uint32) { - m.ContainerBackupFactor = v -} - -// SetSelectors of placement policy. -func (m *PlacementPolicy) SetSelectors(v []*Selector) { - m.Selectors = v -} - -// SetFilters of placement policy. -func (m *PlacementPolicy) SetFilters(v []*Filter) { - m.Filters = v -} - -// SetUnique of placement policy. -func (m *PlacementPolicy) SetUnique(unique bool) { - m.Unique = unique -} - -// SetName of placement filter. -func (m *Filter) SetName(v string) { - m.Name = v -} - -// SetKey of placement filter. -func (m *Filter) SetKey(v string) { - m.Key = v -} - -// SetOperation of placement filter. -func (m *Filter) SetOp(v Operation) { - m.Op = v -} - -// SetValue of placement filter. -func (m *Filter) SetValue(v string) { - m.Value = v -} - -// SetFilters sets sub-filters of placement filter. -func (m *Filter) SetFilters(v []*Filter) { - m.Filters = v -} - -// SetName of placement selector. -func (m *Selector) SetName(v string) { - m.Name = v -} - -// SetCount of nodes of placement selector. -func (m *Selector) SetCount(v uint32) { - m.Count = v -} - -// SetAttribute of nodes of placement selector. -func (m *Selector) SetAttribute(v string) { - m.Attribute = v -} - -// SetFilter of placement selector. -func (m *Selector) SetFilter(v string) { - m.Filter = v -} - -// SetClause of placement selector. -func (m *Selector) SetClause(v Clause) { - m.Clause = v -} - -// SetCount of object replica. -func (m *Replica) SetCount(v uint32) { - m.Count = v -} - -// SetSelector of object replica. -func (m *Replica) SetSelector(v string) { - m.Selector = v -} - -// SetKey sets key to the node attribute. -func (m *NodeInfo_Attribute) SetKey(v string) { - m.Key = v -} - -// SetValue sets value of the node attribute. -func (m *NodeInfo_Attribute) SetValue(v string) { - m.Value = v -} - -// SetParent sets value of the node parents. -func (m *NodeInfo_Attribute) SetParents(v []string) { - m.Parents = v -} - -// SetAddress sets node network address. -// -// Deprecated: use SetAddresses. -func (m *NodeInfo) SetAddress(v string) { - m.SetAddresses([]string{v}) -} - -// SetAddresses sets list of network addresses of the node. -func (m *NodeInfo) SetAddresses(v []string) { - m.Addresses = v -} - -// SetPublicKey sets node public key in a binary format. -func (m *NodeInfo) SetPublicKey(v []byte) { - m.PublicKey = v -} - -// SetAttributes sets list of the node attributes. -func (m *NodeInfo) SetAttributes(v []*NodeInfo_Attribute) { - m.Attributes = v -} - -// SetState sets node state. -func (m *NodeInfo) SetState(v NodeInfo_State) { - m.State = v -} - -// SetCurrentEpoch sets number of the current epoch. -func (x *NetworkInfo) SetCurrentEpoch(v uint64) { - x.CurrentEpoch = v -} - -// SetMagicNumber sets magic number of the sidechain. -func (x *NetworkInfo) SetMagicNumber(v uint64) { - x.MagicNumber = v -} - -// SetMsPerBlock sets MillisecondsPerBlock network parameter. -func (x *NetworkInfo) SetMsPerBlock(v int64) { - x.MsPerBlock = v -} - -// SetNetworkConfig sets NeoFS network configuration. -func (x *NetworkInfo) SetNetworkConfig(v *NetworkConfig) { - x.NetworkConfig = v -} - -// FromString parses Clause from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *Clause) FromString(s string) bool { - i, ok := Clause_value[s] - if ok { - *x = Clause(i) - } - - return ok -} - -// FromString parses Operation from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *Operation) FromString(s string) bool { - i, ok := Operation_value[s] - if ok { - *x = Operation(i) - } - - return ok -} - -// FromString parses NodeInfo_State from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *NodeInfo_State) FromString(s string) bool { - i, ok := NodeInfo_State_value[s] - if ok { - *x = NodeInfo_State(i) - } - - return ok -} - -// SetKey sets parameter key. -func (x *NetworkConfig_Parameter) SetKey(v []byte) { - x.Key = v -} - -// SetValue sets parameter value. -func (x *NetworkConfig_Parameter) SetValue(v []byte) { - x.Value = v -} - -// SetParameters sets NeoFS network parameters. -func (x *NetworkConfig) SetParameters(v []*NetworkConfig_Parameter) { - x.Parameters = v -} - -// SetEpoch sets revision number of the Netmap. -func (x *Netmap) SetEpoch(v uint64) { - x.Epoch = v -} - -// SetNodes sets nodes presented in the Netmap. -func (x *Netmap) SetNodes(v []*NodeInfo) { - x.Nodes = v -} diff --git a/netmap/grpc/types.pb.go b/netmap/grpc/types.pb.go deleted file mode 100644 index ae1f55f5671b6f95094e098256c130f03ed290c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47747 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 CRII`P diff --git a/netmap/grpc/types_frostfs.pb.go b/netmap/grpc/types_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..5dfe96f26c906de8a5b9c72d29a9458cf61d4f9c GIT binary patch literal 52081 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

t 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 a)9pMMhRLQ|M~26=a1&mmO{j}-nEwach@CG0 literal 0 HcmV?d00001 diff --git a/object/grpc/service_frostfs_fuzz.go b/object/grpc/service_frostfs_fuzz.go new file mode 100644 index 0000000..f58ee01 --- /dev/null +++ b/object/grpc/service_frostfs_fuzz.go @@ -0,0 +1,387 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package object + +func DoFuzzProtoGetRequest(data []byte) int { + msg := new(GetRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetRequest(data []byte) int { + msg := new(GetRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoGetResponse(data []byte) int { + msg := new(GetResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetResponse(data []byte) int { + msg := new(GetResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPutRequest(data []byte) int { + msg := new(PutRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPutRequest(data []byte) int { + msg := new(PutRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPutResponse(data []byte) int { + msg := new(PutResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPutResponse(data []byte) int { + msg := new(PutResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoDeleteRequest(data []byte) int { + msg := new(DeleteRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONDeleteRequest(data []byte) int { + msg := new(DeleteRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoDeleteResponse(data []byte) int { + msg := new(DeleteResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONDeleteResponse(data []byte) int { + msg := new(DeleteResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoHeadRequest(data []byte) int { + msg := new(HeadRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONHeadRequest(data []byte) int { + msg := new(HeadRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoHeaderWithSignature(data []byte) int { + msg := new(HeaderWithSignature) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONHeaderWithSignature(data []byte) int { + msg := new(HeaderWithSignature) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoHeadResponse(data []byte) int { + msg := new(HeadResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONHeadResponse(data []byte) int { + msg := new(HeadResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoSearchRequest(data []byte) int { + msg := new(SearchRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONSearchRequest(data []byte) int { + msg := new(SearchRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoSearchResponse(data []byte) int { + msg := new(SearchResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONSearchResponse(data []byte) int { + msg := new(SearchResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoRange(data []byte) int { + msg := new(Range) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONRange(data []byte) int { + msg := new(Range) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoGetRangeRequest(data []byte) int { + msg := new(GetRangeRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetRangeRequest(data []byte) int { + msg := new(GetRangeRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoGetRangeResponse(data []byte) int { + msg := new(GetRangeResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetRangeResponse(data []byte) int { + msg := new(GetRangeResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoGetRangeHashRequest(data []byte) int { + msg := new(GetRangeHashRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetRangeHashRequest(data []byte) int { + msg := new(GetRangeHashRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoGetRangeHashResponse(data []byte) int { + msg := new(GetRangeHashResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONGetRangeHashResponse(data []byte) int { + msg := new(GetRangeHashResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPutSingleRequest(data []byte) int { + msg := new(PutSingleRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPutSingleRequest(data []byte) int { + msg := new(PutSingleRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPutSingleResponse(data []byte) int { + msg := new(PutSingleResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPutSingleResponse(data []byte) int { + msg := new(PutSingleResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPatchRequest(data []byte) int { + msg := new(PatchRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPatchRequest(data []byte) int { + msg := new(PatchRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoPatchResponse(data []byte) int { + msg := new(PatchResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONPatchResponse(data []byte) int { + msg := new(PatchResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/object/grpc/service_frostfs_test.go b/object/grpc/service_frostfs_test.go new file mode 100644 index 0000000..cb4baeb --- /dev/null +++ b/object/grpc/service_frostfs_test.go @@ -0,0 +1,211 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package object + +import ( + testing "testing" +) + +func FuzzProtoGetRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetRequest(data) + }) +} +func FuzzJSONGetRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetRequest(data) + }) +} +func FuzzProtoGetResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetResponse(data) + }) +} +func FuzzJSONGetResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetResponse(data) + }) +} +func FuzzProtoPutRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPutRequest(data) + }) +} +func FuzzJSONPutRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPutRequest(data) + }) +} +func FuzzProtoPutResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPutResponse(data) + }) +} +func FuzzJSONPutResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPutResponse(data) + }) +} +func FuzzProtoDeleteRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoDeleteRequest(data) + }) +} +func FuzzJSONDeleteRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONDeleteRequest(data) + }) +} +func FuzzProtoDeleteResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoDeleteResponse(data) + }) +} +func FuzzJSONDeleteResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONDeleteResponse(data) + }) +} +func FuzzProtoHeadRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoHeadRequest(data) + }) +} +func FuzzJSONHeadRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONHeadRequest(data) + }) +} +func FuzzProtoHeaderWithSignature(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoHeaderWithSignature(data) + }) +} +func FuzzJSONHeaderWithSignature(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONHeaderWithSignature(data) + }) +} +func FuzzProtoHeadResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoHeadResponse(data) + }) +} +func FuzzJSONHeadResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONHeadResponse(data) + }) +} +func FuzzProtoSearchRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoSearchRequest(data) + }) +} +func FuzzJSONSearchRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONSearchRequest(data) + }) +} +func FuzzProtoSearchResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoSearchResponse(data) + }) +} +func FuzzJSONSearchResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONSearchResponse(data) + }) +} +func FuzzProtoRange(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoRange(data) + }) +} +func FuzzJSONRange(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONRange(data) + }) +} +func FuzzProtoGetRangeRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetRangeRequest(data) + }) +} +func FuzzJSONGetRangeRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetRangeRequest(data) + }) +} +func FuzzProtoGetRangeResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetRangeResponse(data) + }) +} +func FuzzJSONGetRangeResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetRangeResponse(data) + }) +} +func FuzzProtoGetRangeHashRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetRangeHashRequest(data) + }) +} +func FuzzJSONGetRangeHashRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetRangeHashRequest(data) + }) +} +func FuzzProtoGetRangeHashResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoGetRangeHashResponse(data) + }) +} +func FuzzJSONGetRangeHashResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONGetRangeHashResponse(data) + }) +} +func FuzzProtoPutSingleRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPutSingleRequest(data) + }) +} +func FuzzJSONPutSingleRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPutSingleRequest(data) + }) +} +func FuzzProtoPutSingleResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPutSingleResponse(data) + }) +} +func FuzzJSONPutSingleResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPutSingleResponse(data) + }) +} +func FuzzProtoPatchRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPatchRequest(data) + }) +} +func FuzzJSONPatchRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPatchRequest(data) + }) +} +func FuzzProtoPatchResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoPatchResponse(data) + }) +} +func FuzzJSONPatchResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONPatchResponse(data) + }) +} diff --git a/object/grpc/service_grpc.pb.go b/object/grpc/service_grpc.pb.go index 2494be9d9e9abd2b5f904981d7a93226e1fd58c2..687df9973e3b6536a5bc1ef015bd8557c943f6f4 100644 GIT binary patch delta 37 lcmbR8hH1(hrVT0flcTEFZ;lfdW8AFixZ5AWTRACP82~tX51#-4 delta 45 pcmbR8hH1(hrVT0fll6IcCW{*^-W(?^#<*G2akoFJ$jV9C$^e9t5FY>l diff --git a/object/grpc/status.pb.go b/object/grpc/status.pb.go deleted file mode 100644 index 034fa1bada29d6d8bcc387976a865cabe0310ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8502 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 literal 0 HcmV?d00001 diff --git a/object/grpc/types_frostfs_fuzz.go b/object/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..8491638 --- /dev/null +++ b/object/grpc/types_frostfs_fuzz.go @@ -0,0 +1,102 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package object + +func DoFuzzProtoShortHeader(data []byte) int { + msg := new(ShortHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONShortHeader(data []byte) int { + msg := new(ShortHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoHeader(data []byte) int { + msg := new(Header) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONHeader(data []byte) int { + msg := new(Header) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoObject(data []byte) int { + msg := new(Object) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONObject(data []byte) int { + msg := new(Object) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoSplitInfo(data []byte) int { + msg := new(SplitInfo) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONSplitInfo(data []byte) int { + msg := new(SplitInfo) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoECInfo(data []byte) int { + msg := new(ECInfo) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONECInfo(data []byte) int { + msg := new(ECInfo) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/object/grpc/types_frostfs_test.go b/object/grpc/types_frostfs_test.go new file mode 100644 index 0000000..11825be --- /dev/null +++ b/object/grpc/types_frostfs_test.go @@ -0,0 +1,61 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package object + +import ( + testing "testing" +) + +func FuzzProtoShortHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoShortHeader(data) + }) +} +func FuzzJSONShortHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONShortHeader(data) + }) +} +func FuzzProtoHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoHeader(data) + }) +} +func FuzzJSONHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONHeader(data) + }) +} +func FuzzProtoObject(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoObject(data) + }) +} +func FuzzJSONObject(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONObject(data) + }) +} +func FuzzProtoSplitInfo(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoSplitInfo(data) + }) +} +func FuzzJSONSplitInfo(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONSplitInfo(data) + }) +} +func FuzzProtoECInfo(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoECInfo(data) + }) +} +func FuzzJSONECInfo(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONECInfo(data) + }) +} diff --git a/refs/grpc/types.go b/refs/grpc/types.go deleted file mode 100644 index cdb69aa..0000000 --- a/refs/grpc/types.go +++ /dev/null @@ -1,97 +0,0 @@ -package refs - -// SetValue sets container identifier in a binary format. -func (x *ContainerID) SetValue(v []byte) { - x.Value = v -} - -// SetValue sets object identifier in a binary format. -func (x *ObjectID) SetValue(v []byte) { - x.Value = v -} - -// SetValue sets owner identifier in a binary format. -func (x *OwnerID) SetValue(v []byte) { - x.Value = v -} - -// SetContainerId sets container identifier of the address. -func (x *Address) SetContainerId(v *ContainerID) { - x.ContainerId = v -} - -// SetObjectId sets object identifier of the address. -func (x *Address) SetObjectId(v *ObjectID) { - x.ObjectId = v -} - -// SetType in generic checksum structure. -func (x *Checksum) SetType(v ChecksumType) { - x.Type = v -} - -// SetSum in generic checksum structure. -func (x *Checksum) SetSum(v []byte) { - x.Sum = v -} - -// SetMajor sets major version number. -func (x *Version) SetMajor(v uint32) { - x.Major = v -} - -// SetMinor sets minor version number. -func (x *Version) SetMinor(v uint32) { - x.Minor = v -} - -// SetKey sets public key in a binary format. -func (x *Signature) SetKey(v []byte) { - x.Key = v -} - -// SetSign sets signature. -func (x *Signature) SetSign(v []byte) { - x.Sign = v -} - -// SetScheme sets signature scheme. -func (x *Signature) SetScheme(s SignatureScheme) { - x.Scheme = s -} - -// SetKey sets public key in a binary format. -func (x *SignatureRFC6979) SetKey(v []byte) { - x.Key = v -} - -// SetSign sets signature. -func (x *SignatureRFC6979) SetSign(v []byte) { - x.Sign = v -} - -// FromString parses SignatureScheme from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *SignatureScheme) FromString(s string) bool { - i, ok := SignatureScheme_value[s] - if ok { - *x = SignatureScheme(i) - } - - return ok -} - -// FromString parses ChecksumType from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *ChecksumType) FromString(s string) bool { - i, ok := ChecksumType_value[s] - if ok { - *x = ChecksumType(i) - } - - return ok -} diff --git a/refs/grpc/types.pb.go b/refs/grpc/types.pb.go deleted file mode 100644 index ab3ae423130140bf0afab6d9a903c851958dc468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27241 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 Dk8Br= diff --git a/session/grpc/service_frostfs.pb.go b/session/grpc/service_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..7fb7d9e811331f0dfe13badf32df5d402fa872e0 GIT binary patch literal 19348 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 Duuxp3 literal 0 HcmV?d00001 diff --git a/session/grpc/service_frostfs_fuzz.go b/session/grpc/service_frostfs_fuzz.go new file mode 100644 index 0000000..759361c --- /dev/null +++ b/session/grpc/service_frostfs_fuzz.go @@ -0,0 +1,45 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package session + +func DoFuzzProtoCreateRequest(data []byte) int { + msg := new(CreateRequest) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONCreateRequest(data []byte) int { + msg := new(CreateRequest) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoCreateResponse(data []byte) int { + msg := new(CreateResponse) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONCreateResponse(data []byte) int { + msg := new(CreateResponse) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/session/grpc/service_frostfs_test.go b/session/grpc/service_frostfs_test.go new file mode 100644 index 0000000..fc8664e --- /dev/null +++ b/session/grpc/service_frostfs_test.go @@ -0,0 +1,31 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package session + +import ( + testing "testing" +) + +func FuzzProtoCreateRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoCreateRequest(data) + }) +} +func FuzzJSONCreateRequest(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONCreateRequest(data) + }) +} +func FuzzProtoCreateResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoCreateResponse(data) + }) +} +func FuzzJSONCreateResponse(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONCreateResponse(data) + }) +} diff --git a/session/grpc/types.go b/session/grpc/types.go deleted file mode 100644 index 857c45e..0000000 --- a/session/grpc/types.go +++ /dev/null @@ -1,246 +0,0 @@ -package session - -import ( - acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl/grpc" - refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc" - status "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status/grpc" -) - -// SetKey sets key to the X-Header. -func (m *XHeader) SetKey(v string) { - m.Key = v -} - -// SetValue sets value of the X-Header. -func (m *XHeader) SetValue(v string) { - m.Value = v -} - -// SetExp sets epoch number of the token expiration. -func (m *SessionToken_Body_TokenLifetime) SetExp(v uint64) { - m.Exp = v -} - -// SetNbf sets starting epoch number of the token. -func (m *SessionToken_Body_TokenLifetime) SetNbf(v uint64) { - m.Nbf = v -} - -// SetIat sets the number of the epoch in which the token was issued. -func (m *SessionToken_Body_TokenLifetime) SetIat(v uint64) { - m.Iat = v -} - -// SetId sets identifier of the session token. -func (m *SessionToken_Body) SetId(v []byte) { - m.Id = v -} - -// SetOwnerId sets identifier of the session token owner. -func (m *SessionToken_Body) SetOwnerId(v *refs.OwnerID) { - m.OwnerId = v -} - -// SetLifetime sets lifetime of the session token. -func (m *SessionToken_Body) SetLifetime(v *SessionToken_Body_TokenLifetime) { - m.Lifetime = v -} - -// SetSessionKey sets public session key in a binary format. -func (m *SessionToken_Body) SetSessionKey(v []byte) { - m.SessionKey = v -} - -// SetObjectAddressContext sets object context of the session token. -func (m *SessionToken_Body) SetObject(v *ObjectSessionContext) { - m.Context = &SessionToken_Body_Object{ - Object: v, - } -} - -// SetContainer sets container context of the session token. -func (m *SessionToken_Body) SetContainer(v *ContainerSessionContext) { - m.Context = &SessionToken_Body_Container{ - Container: v, - } -} - -// SetTarget specifies objects involved in the object session. -func (m *ObjectSessionContext) SetTarget(tgt *ObjectSessionContext_Target) { - m.Target = tgt -} - -// SetVerb sets type of request for which the token is issued. -func (m *ObjectSessionContext) SetVerb(v ObjectSessionContext_Verb) { - m.Verb = v -} - -// SetVerb sets type of request for which the token is issued. -func (x *ContainerSessionContext) SetVerb(v ContainerSessionContext_Verb) { - x.Verb = v -} - -// SetWildcard sets wildcard flag of the container session. -func (x *ContainerSessionContext) SetWildcard(v bool) { - x.Wildcard = v -} - -// SetContainerId sets identifier of the container related to the session. -func (x *ContainerSessionContext) SetContainerId(v *refs.ContainerID) { - x.ContainerId = v -} - -// SetBody sets session token body. -func (m *SessionToken) SetBody(v *SessionToken_Body) { - m.Body = v -} - -// SetSignature sets session token signature. -func (m *SessionToken) SetSignature(v *refs.Signature) { - m.Signature = v -} - -// SetVersion sets client protocol version. -func (m *RequestMetaHeader) SetVersion(v *refs.Version) { - m.Version = v -} - -// SetEpoch sets client local epoch. -func (m *RequestMetaHeader) SetEpoch(v uint64) { - m.Epoch = v -} - -// SetTtl sets request TTL. -func (m *RequestMetaHeader) SetTtl(v uint32) { - m.Ttl = v -} - -// SetXHeaders sets request X-Headers. -func (m *RequestMetaHeader) SetXHeaders(v []*XHeader) { - m.XHeaders = v -} - -// SetSessionToken sets session token of the request. -func (m *RequestMetaHeader) SetSessionToken(v *SessionToken) { - m.SessionToken = v -} - -// SetBearerToken sets bearer token of the request. -func (m *RequestMetaHeader) SetBearerToken(v *acl.BearerToken) { - m.BearerToken = v -} - -// SetOrigin sets origin request meta header. -func (m *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) { - m.Origin = v -} - -// GetNetworkMagic returns NeoFS network magic. -func (m *RequestMetaHeader) GetNetworkMagic() uint64 { - if m != nil { - return m.MagicNumber - } - - return 0 -} - -// SetMagicNumber sets NeoFS network magic. -func (m *RequestMetaHeader) SetMagicNumber(v uint64) { - m.MagicNumber = v -} - -// SetVersion sets server protocol version. -func (m *ResponseMetaHeader) SetVersion(v *refs.Version) { - m.Version = v -} - -// SetEpoch sets server local epoch. -func (m *ResponseMetaHeader) SetEpoch(v uint64) { - m.Epoch = v -} - -// SetTtl sets response TTL. -func (m *ResponseMetaHeader) SetTtl(v uint32) { - m.Ttl = v -} - -// SetXHeaders sets response X-Headers. -func (m *ResponseMetaHeader) SetXHeaders(v []*XHeader) { - m.XHeaders = v -} - -// SetOrigin sets origin response meta header. -func (m *ResponseMetaHeader) SetOrigin(v *ResponseMetaHeader) { - m.Origin = v -} - -// SetStatus sets response status. -func (m *ResponseMetaHeader) SetStatus(v *status.Status) { - m.Status = v -} - -// SetBodySignature sets signature of the request body. -func (m *RequestVerificationHeader) SetBodySignature(v *refs.Signature) { - m.BodySignature = v -} - -// SetMetaSignature sets signature of the request meta. -func (m *RequestVerificationHeader) SetMetaSignature(v *refs.Signature) { - m.MetaSignature = v -} - -// SetOriginSignature sets signature of the origin verification header of the request. -func (m *RequestVerificationHeader) SetOriginSignature(v *refs.Signature) { - m.OriginSignature = v -} - -// SetOrigin sets origin verification header of the request. -func (m *RequestVerificationHeader) SetOrigin(v *RequestVerificationHeader) { - m.Origin = v -} - -// SetBodySignature sets signature of the response body. -func (m *ResponseVerificationHeader) SetBodySignature(v *refs.Signature) { - m.BodySignature = v -} - -// SetMetaSignature sets signature of the response meta. -func (m *ResponseVerificationHeader) SetMetaSignature(v *refs.Signature) { - m.MetaSignature = v -} - -// SetOriginSignature sets signature of the origin verification header of the response. -func (m *ResponseVerificationHeader) SetOriginSignature(v *refs.Signature) { - m.OriginSignature = v -} - -// SetOrigin sets origin verification header of the response. -func (m *ResponseVerificationHeader) SetOrigin(v *ResponseVerificationHeader) { - m.Origin = v -} - -// FromString parses ObjectSessionContext_Verb from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *ObjectSessionContext_Verb) FromString(s string) bool { - i, ok := ObjectSessionContext_Verb_value[s] - if ok { - *x = ObjectSessionContext_Verb(i) - } - - return ok -} - -// FromString parses ContainerSessionContext_Verb from a string representation, -// It is a reverse action to String(). -// -// Returns true if s was parsed successfully. -func (x *ContainerSessionContext_Verb) FromString(s string) bool { - i, ok := ContainerSessionContext_Verb_value[s] - if ok { - *x = ContainerSessionContext_Verb(i) - } - - return ok -} diff --git a/session/grpc/types.pb.go b/session/grpc/types.pb.go deleted file mode 100644 index 9f517436ffd99ca94731c6fa95afdcf5e1b2691a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57288 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 V7QAaUw+yD6wPBW^x1)r~{{eCiPQL&E literal 0 HcmV?d00001 diff --git a/session/grpc/types_frostfs_fuzz.go b/session/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..fae4a05 --- /dev/null +++ b/session/grpc/types_frostfs_fuzz.go @@ -0,0 +1,159 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package session + +func DoFuzzProtoObjectSessionContext(data []byte) int { + msg := new(ObjectSessionContext) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONObjectSessionContext(data []byte) int { + msg := new(ObjectSessionContext) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoContainerSessionContext(data []byte) int { + msg := new(ContainerSessionContext) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONContainerSessionContext(data []byte) int { + msg := new(ContainerSessionContext) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoSessionToken(data []byte) int { + msg := new(SessionToken) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONSessionToken(data []byte) int { + msg := new(SessionToken) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoXHeader(data []byte) int { + msg := new(XHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONXHeader(data []byte) int { + msg := new(XHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoRequestMetaHeader(data []byte) int { + msg := new(RequestMetaHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONRequestMetaHeader(data []byte) int { + msg := new(RequestMetaHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoResponseMetaHeader(data []byte) int { + msg := new(ResponseMetaHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONResponseMetaHeader(data []byte) int { + msg := new(ResponseMetaHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoRequestVerificationHeader(data []byte) int { + msg := new(RequestVerificationHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONRequestVerificationHeader(data []byte) int { + msg := new(RequestVerificationHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} +func DoFuzzProtoResponseVerificationHeader(data []byte) int { + msg := new(ResponseVerificationHeader) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONResponseVerificationHeader(data []byte) int { + msg := new(ResponseVerificationHeader) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/session/grpc/types_frostfs_test.go b/session/grpc/types_frostfs_test.go new file mode 100644 index 0000000..5c9b6c2 --- /dev/null +++ b/session/grpc/types_frostfs_test.go @@ -0,0 +1,91 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package session + +import ( + testing "testing" +) + +func FuzzProtoObjectSessionContext(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoObjectSessionContext(data) + }) +} +func FuzzJSONObjectSessionContext(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONObjectSessionContext(data) + }) +} +func FuzzProtoContainerSessionContext(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoContainerSessionContext(data) + }) +} +func FuzzJSONContainerSessionContext(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONContainerSessionContext(data) + }) +} +func FuzzProtoSessionToken(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoSessionToken(data) + }) +} +func FuzzJSONSessionToken(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONSessionToken(data) + }) +} +func FuzzProtoXHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoXHeader(data) + }) +} +func FuzzJSONXHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONXHeader(data) + }) +} +func FuzzProtoRequestMetaHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoRequestMetaHeader(data) + }) +} +func FuzzJSONRequestMetaHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONRequestMetaHeader(data) + }) +} +func FuzzProtoResponseMetaHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoResponseMetaHeader(data) + }) +} +func FuzzJSONResponseMetaHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONResponseMetaHeader(data) + }) +} +func FuzzProtoRequestVerificationHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoRequestVerificationHeader(data) + }) +} +func FuzzJSONRequestVerificationHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONRequestVerificationHeader(data) + }) +} +func FuzzProtoResponseVerificationHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoResponseVerificationHeader(data) + }) +} +func FuzzJSONResponseVerificationHeader(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONResponseVerificationHeader(data) + }) +} diff --git a/signature/marshaller.go b/signature/marshaller.go index ff9beb3..f19ed8e 100644 --- a/signature/marshaller.go +++ b/signature/marshaller.go @@ -5,6 +5,10 @@ type stableMarshaler interface { StableSize() int } +type messageData interface { + MessageData() []byte +} + type StableMarshalerWrapper struct { SM stableMarshaler } diff --git a/status/grpc/types.go b/status/grpc/types.go deleted file mode 100644 index 993f632..0000000 --- a/status/grpc/types.go +++ /dev/null @@ -1,26 +0,0 @@ -package status - -// SetId sets identifier of the Status_Detail. -func (x *Status_Detail) SetId(v uint32) { - x.Id = v -} - -// SetValue sets value of the Status_Detail. -func (x *Status_Detail) SetValue(v []byte) { - x.Value = v -} - -// SetCode sets code of the Status. -func (x *Status) SetCode(v uint32) { - x.Code = v -} - -// SetMessage sets message about the Status. -func (x *Status) SetMessage(v string) { - x.Message = v -} - -// SetDetails sets details of the Status. -func (x *Status) SetDetails(v []*Status_Detail) { - x.Details = v -} diff --git a/status/grpc/types.pb.go b/status/grpc/types.pb.go deleted file mode 100644 index b6b081b238fc2fca52e7a2d143b63587febf4ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24204 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 SP>y2V^LXDP*-77TtN#szzzHh= diff --git a/status/grpc/types_frostfs.pb.go b/status/grpc/types_frostfs.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..f3a0fa7e209c41a8e7844fb6bf5a996daf9a87b5 GIT binary patch literal 13274 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 ZoDC&4VT>89b+Xh3HgFpPtJJ0!(SN3|iZK8H literal 0 HcmV?d00001 diff --git a/tombstone/grpc/types_frostfs_fuzz.go b/tombstone/grpc/types_frostfs_fuzz.go new file mode 100644 index 0000000..57cfb58 --- /dev/null +++ b/tombstone/grpc/types_frostfs_fuzz.go @@ -0,0 +1,26 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package tombstone + +func DoFuzzProtoTombstone(data []byte) int { + msg := new(Tombstone) + if err := msg.UnmarshalProtobuf(data); err != nil { + return 0 + } + _ = msg.MarshalProtobuf(nil) + return 1 +} +func DoFuzzJSONTombstone(data []byte) int { + msg := new(Tombstone) + if err := msg.UnmarshalJSON(data); err != nil { + return 0 + } + _, err := msg.MarshalJSON() + if err != nil { + panic(err) + } + return 1 +} diff --git a/tombstone/grpc/types_frostfs_test.go b/tombstone/grpc/types_frostfs_test.go new file mode 100644 index 0000000..8264824 --- /dev/null +++ b/tombstone/grpc/types_frostfs_test.go @@ -0,0 +1,21 @@ +//go:build gofuzz +// +build gofuzz + +// Code generated by protoc-gen-go-frostfs. DO NOT EDIT. + +package tombstone + +import ( + testing "testing" +) + +func FuzzProtoTombstone(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzProtoTombstone(data) + }) +} +func FuzzJSONTombstone(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + DoFuzzJSONTombstone(data) + }) +} diff --git a/util/pool/marshal.go b/util/pool/marshal.go new file mode 100644 index 0000000..107df28 --- /dev/null +++ b/util/pool/marshal.go @@ -0,0 +1,7 @@ +package pool + +import ( + "github.com/VictoriaMetrics/easyproto" +) + +var MarshalerPool easyproto.MarshalerPool diff --git a/util/proto/encoding/compat.go b/util/proto/encoding/compat.go new file mode 100644 index 0000000..4d0c0da --- /dev/null +++ b/util/proto/encoding/compat.go @@ -0,0 +1,22 @@ +package encoding + +import ( + _ "google.golang.org/grpc/encoding/proto" // Ensure default codec is registered before our one. + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/protoadapt" +) + +// messageV2Of converts v to a proto.Message. +// This is needed for this library to continue working in presense of external gRPC packages, +// such as opentelemetry gRPC exporter. +// Copied from https://github.com/grpc/grpc-go/blob/e524655becd8d4c7ba9e8687faef456e495e341e/encoding/proto/proto.go#L59. +func messageV2Of(v any) proto.Message { + switch v := v.(type) { + case protoadapt.MessageV1: + return protoadapt.MessageV2Of(v) + case protoadapt.MessageV2: + return v + } + + return nil +} diff --git a/util/proto/encoding/json.go b/util/proto/encoding/json.go new file mode 100644 index 0000000..3456a40 --- /dev/null +++ b/util/proto/encoding/json.go @@ -0,0 +1,48 @@ +package encoding + +import ( + "encoding/json" + "fmt" + + "google.golang.org/grpc/encoding" + "google.golang.org/protobuf/encoding/protojson" +) + +// JSONCodec is easyjson codec used for code generated by protogen. +// It is binary-level compatible with the standard protojson format, thus uses the same name. +type JSONCodec struct{} + +var _ encoding.Codec = JSONCodec{} + +func init() { + encoding.RegisterCodec(JSONCodec{}) +} + +// Name implements the encoding.Codec interface. +func (JSONCodec) Name() string { return "json" } + +// Marshal implements the encoding.Codec interface. +func (JSONCodec) Marshal(v any) ([]byte, error) { + switch v := v.(type) { + case json.Marshaler: + return json.Marshal(v) + default: + if v := messageV2Of(v); v != nil { + return protojson.Marshal(v) + } + return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) + } +} + +// Unmarshal implements the encoding.Codec interface. +func (JSONCodec) Unmarshal(data []byte, v any) error { + switch v := v.(type) { + case json.Unmarshaler: + return json.Unmarshal(data, v) + default: + if v := messageV2Of(v); v != nil { + return protojson.Unmarshal(data, v) + } + return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) + } +} diff --git a/util/proto/encoding/proto.go b/util/proto/encoding/proto.go new file mode 100644 index 0000000..5f3c556 --- /dev/null +++ b/util/proto/encoding/proto.go @@ -0,0 +1,57 @@ +package encoding + +import ( + "fmt" + + "google.golang.org/grpc/encoding" + "google.golang.org/protobuf/proto" +) + +// ProtoCodec is easyproto codec used for code generated by protogen. +// It is binary-level compatible with the standard proto codec, thus uses the same name. +type ProtoCodec struct{} + +// ProtoMarshaler is an interface accepted by ProtoCodec.Marshal. +type ProtoMarshaler interface { + MarshalProtobuf([]byte) []byte +} + +// ProtoUnmarshaler is an interface accepted by ProtoCodec.Unmarshal. +type ProtoUnmarshaler interface { + UnmarshalProtobuf([]byte) error +} + +var _ encoding.Codec = ProtoCodec{} + +func init() { + encoding.RegisterCodec(ProtoCodec{}) +} + +// Name implements the encoding.Codec interface. +func (ProtoCodec) Name() string { return "proto" } + +// Marshal implements the encoding.Codec interface. +func (ProtoCodec) Marshal(v any) ([]byte, error) { + switch v := v.(type) { + case ProtoMarshaler: + return v.MarshalProtobuf(nil), nil + default: + if v := messageV2Of(v); v != nil { + return proto.Marshal(v) + } + return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) + } +} + +// Unmarshal implements the encoding.Codec interface. +func (ProtoCodec) Unmarshal(data []byte, v any) error { + switch v := v.(type) { + case ProtoUnmarshaler: + return v.UnmarshalProtobuf(data) + default: + if v := messageV2Of(v); v != nil { + return proto.Unmarshal(data, v) + } + return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) + } +} diff --git a/util/proto/marshal.go b/util/proto/marshal.go index 26b3eb0..e687a10 100644 --- a/util/proto/marshal.go +++ b/util/proto/marshal.go @@ -17,6 +17,10 @@ import ( type ( stableMarshaler interface { StableMarshal([]byte) []byte + stableSizer + } + + stableSizer interface { StableSize() int } @@ -260,6 +264,11 @@ type ptrStableMarshaler[T any] interface { ~*T } +type ptrStableSizer[T any] interface { + stableSizer + ~*T +} + func NestedStructureMarshal[T any, M ptrStableMarshaler[T]](field int64, buf []byte, v M) int { if v == nil { return 0 @@ -303,7 +312,7 @@ func NestedStructureSetMarshalData[T any, M setMarshalData[T]](field int64, pare return offset + n } -func NestedStructureSize[T any, M ptrStableMarshaler[T]](field int64, v M) (size int) { +func NestedStructureSize[T any, M ptrStableSizer[T]](field int64, v M) (size int) { if v == nil { return 0 } @@ -311,7 +320,7 @@ func NestedStructureSize[T any, M ptrStableMarshaler[T]](field int64, v M) (size return NestedStructureSizeUnchecked(field, v) } -func NestedStructureSizeUnchecked[T stableMarshaler](field int64, v T) int { +func NestedStructureSizeUnchecked[T stableSizer](field int64, v T) int { n := v.StableSize() return protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(n)) } diff --git a/util/protogen/internal_gengo/file.go b/util/protogen/internal_gengo/file.go new file mode 100644 index 0000000..a19881e --- /dev/null +++ b/util/protogen/internal_gengo/file.go @@ -0,0 +1,260 @@ +package internal_gengo + +import ( + "fmt" + "sort" + "strconv" + "strings" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var ( + strconvPackage = protogen.GoImportPath("strconv") + fmtPackage = protogen.GoImportPath("fmt") + jsonPackage = protogen.GoImportPath("encoding/json") + easyprotoPackage = protogen.GoImportPath("github.com/VictoriaMetrics/easyproto") + mpPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/pool") + protoPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto") + encodingPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto/encoding") + + mp = mpPackage.Ident("MarshalerPool") +) + +// GenerateFile generates a *.pb.go file enforcing field-order serialization. +func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile { + filename := file.GeneratedFilenamePrefix + "_frostfs.pb.go" + g := gen.NewGeneratedFile(filename, file.GoImportPath) + + g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.") + g.P() + g.P("package ", file.GoPackageName) + g.P() + g.Import(encodingPackage) + + // Doesn't work for multiple files in a single package, use external pool. + // g.P("var mp ", easyprotoPackage.Ident("MarshalerPool")) + + for _, e := range file.Enums { + emitEnum(g, e) + } + for _, msg := range file.Messages { + emitEasyProto(g, msg) + } + return g +} + +func emitEnum(g *protogen.GeneratedFile, e *protogen.Enum) { + g.P("type " + e.GoIdent.GoName + " int32") + g.P("const (") + for _, ev := range e.Values { + g.P(ev.GoIdent.GoName, " = ", ev.Desc.Number()) + } + g.P(")") + + g.P("var (") + g.P(e.GoIdent.GoName+"_name", " = map[int32]string{") + for _, value := range e.Values { + g.P(value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",") + } + g.P("}") + g.P(e.GoIdent.GoName+"_value", " = map[string]int32{") + for _, value := range e.Values { + g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",") + } + g.P("}") + g.P(")") + g.P() + + g.P("func (x ", e.GoIdent.GoName, ") String() string {") + g.P("if v, ok := ", e.GoIdent.GoName+"_name[int32(x)]; ok {") + g.P("return v") + g.P("}") + g.P("return ", strconvPackage.Ident("FormatInt"), "(int64(x), 10)") + g.P("}") + + g.P("func (x *", e.GoIdent.GoName, ") FromString(s string) bool {") + g.P("if v, ok := ", e.GoIdent.GoName+"_value[s]; ok {") + g.P("*x = ", e.GoIdent.GoName, "(v)") + g.P("return true") + g.P("}") + g.P("return false") + g.P("}") +} + +func emitEasyProto(g *protogen.GeneratedFile, msg *protogen.Message) { + for _, e := range msg.Enums { + emitEnum(g, e) + } + for _, m := range msg.Messages { + emitEasyProto(g, m) + } + + g.P("type " + msg.GoIdent.GoName + " struct {") + emitMessageFields(g, msg) + // g.P("messageData []byte") + g.P("}") + + g.P("var (") + g.P("_ ", encodingPackage.Ident("ProtoMarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)") + g.P("_ ", encodingPackage.Ident("ProtoUnmarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)") + g.P("_ ", jsonPackage.Ident("Marshaler"), " = (*", msg.GoIdent.GoName, ")(nil)") + g.P("_ ", jsonPackage.Ident("Unmarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)") + g.P(")") + + emitStableSize(g, msg) + if strings.HasSuffix(msg.GoIdent.GoName, "Request") || strings.HasSuffix(msg.GoIdent.GoName, "Response") { + emitSignatureMethods(g, msg) + } + + emitProtoMethods(g, msg) + emitGettersSetters(g, msg) + emitJSONMethods(g, msg) + + for _, f := range msg.Fields { + if isFirstOneof(f) { + genOneof(g, f) + } + } + + emitMessageData(g, msg) +} + +func isFirstOneof(f *protogen.Field) bool { + return f.Oneof != nil && f == f.Oneof.Fields[0] +} + +func emitOneofGettersSetters(g *protogen.GeneratedFile, msg *protogen.Message, ff *protogen.Field) { + // For some reason protoc generates different code for oneof message/non-message fields: + // 1. For message we have 2 level struct wrapping and setters use inner type. + // 2. For other types we also have 2 level wrapping, but setters use outer type. + if ff.Desc.Kind() == protoreflect.MessageKind { + ft := fieldType(g, ff) + + g.P("func (x *", msg.GoIdent.GoName, ") Get", ff.GoName, "() ", ft, " {") + g.P("if xx, ok := x.Get", ff.Oneof.GoName, "().(*", ff.GoIdent, "); ok { return xx.", ff.GoName, " }") + g.P("return nil") + g.P("}") + + g.P("func (x *", msg.GoIdent.GoName, ") Set", ff.GoName, "(v ", ft, ") {") + g.P("x.", ff.Oneof.GoName, " = &", ff.GoIdent, "{", ff.GoName, ": v}") + g.P("}") + } else { + g.P("func (x *", msg.GoIdent.GoName, ") Get", ff.GoName, "() *", ff.GoIdent, " {") + g.P("if xx, ok := x.Get", ff.Oneof.GoName, "().(*", ff.GoIdent, "); ok { return xx }") + g.P("return nil") + g.P("}") + + g.P("func (x *", msg.GoIdent.GoName, ") Set", ff.GoName, "(v *", ff.GoIdent, ") {") + g.P("x.", ff.Oneof.GoName, " = v") + g.P("}") + + ft := fieldType(g, ff) + emitGetterSetter(g, ff.GoIdent.GoName, ff.GoName, ft.String(), "nil") + } +} + +func emitGettersSetters(g *protogen.GeneratedFile, msg *protogen.Message) { + for _, f := range msg.Fields { + if f.Oneof != nil { + if f.Oneof.Fields[0] == f { + emitGetterSetter(g, msg.GoIdent.GoName, f.Oneof.GoName, oneOfDescriptor(f.Oneof), "nil") + for _, ff := range f.Oneof.Fields { + emitOneofGettersSetters(g, msg, ff) + } + } + continue + } + + ft := fieldType(g, f) + emitGetterSetter(g, msg.GoIdent.GoName, f.GoName, ft.String(), fieldDefaultValue(f)) + } +} + +func emitMessageData(g *protogen.GeneratedFile, msg *protogen.Message) { + return + g.P("func (x *", msg.GoIdent.GoName, ") MessageData() []byte {") + g.P("return x.messageData") + g.P("}") +} + +func emitMessageFields(g *protogen.GeneratedFile, msg *protogen.Message) { + for _, field := range msg.Fields { + genMessageField(g, field) + } +} + +func genMessageField(g *protogen.GeneratedFile, field *protogen.Field) { + if field.Oneof != nil { + if field.Oneof.Fields[0] == field { + g.P(field.Oneof.GoName, " ", oneOfDescriptor(field.Oneof)) + } + return + } + + typ := fieldType(g, field) + g.P(field.GoName, " ", typ, fmt.Sprintf(" `json:%q`", fieldJSONName(field))) +} + +func oneOfDescriptor(oneof *protogen.Oneof) string { + return "is" + oneof.GoIdent.GoName +} + +func genOneof(g *protogen.GeneratedFile, field *protogen.Field) { + ifName := oneOfDescriptor(field.Oneof) + g.P("type ", ifName, " interface {") + g.P(ifName, "()") + g.P("}") + g.P() + for _, field := range field.Oneof.Fields { + g.P("type ", field.GoIdent, " struct {") + + ft := fieldType(g, field) + g.P(field.GoName, " ", ft) + g.P("}") + g.P() + } + for _, field := range field.Oneof.Fields { + g.P("func (*", field.GoIdent, ") ", ifName, "() {}") + g.P() + } +} + +func fieldDefaultValue(field *protogen.Field) string { + if field.Desc.Cardinality() == protoreflect.Repeated { + return "nil" + } + + switch field.Desc.Kind() { + case protoreflect.MessageKind, protoreflect.BytesKind: + return "nil" + case protoreflect.BoolKind: + return "false" + case protoreflect.StringKind: + return `""` + default: + return "0" + } +} + +func castFieldName(f *protogen.Field) string { + if f.Oneof != nil { + return "x." + f.Oneof.GoName + } + + name := "x." + f.GoName + if f.Desc.Kind() != protoreflect.EnumKind { + return name + } + return "int32(" + name + ")" +} + +func sortFields(fs []*protogen.Field) []*protogen.Field { + res := make([]*protogen.Field, len(fs)) + copy(res, fs) + sort.Slice(res, func(i, j int) bool { + return res[i].Desc.Number() < res[j].Desc.Number() + }) + return res +} diff --git a/util/protogen/internal_gengo/fuzz.go b/util/protogen/internal_gengo/fuzz.go new file mode 100644 index 0000000..b0a8f7a --- /dev/null +++ b/util/protogen/internal_gengo/fuzz.go @@ -0,0 +1,69 @@ +package internal_gengo + +import ( + "google.golang.org/protobuf/compiler/protogen" +) + +var testingPackage = protogen.GoImportPath("testing") + +func GenerateFuzzTests(gen *protogen.Plugin, file *protogen.File) { + { + filename := file.GeneratedFilenamePrefix + "_frostfs_fuzz.go" + g := gen.NewGeneratedFile(filename, file.GoImportPath) + + g.P("//go:build gofuzz") + g.P("// +build gofuzz") + g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.") + g.P() + g.P("package ", file.GoPackageName) + g.P() + + for _, msg := range file.Messages { + emitFuzzWrappers(g, msg) + } + } + { + filename := file.GeneratedFilenamePrefix + "_frostfs_test.go" + g := gen.NewGeneratedFile(filename, file.GoImportPath) + + g.P("//go:build gofuzz") + g.P("// +build gofuzz") + g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.") + g.P() + g.P("package ", file.GoPackageName) + g.P() + + for _, msg := range file.Messages { + emitFuzzTests(g, msg) + } + } +} + +func emitFuzzWrappers(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("func DoFuzzProto", msg.GoIdent.GoName, "(data []byte) int {") + g.P("msg := new(", msg.GoIdent.GoName, ")") + g.P("if err := msg.UnmarshalProtobuf(data); err != nil { return 0 }") + g.P("_ = msg.MarshalProtobuf(nil)") + g.P("return 1") + g.P("}") + + g.P("func DoFuzzJSON", msg.GoIdent.GoName, "(data []byte) int {") + g.P("msg := new(", msg.GoIdent.GoName, ")") + g.P("if err := msg.UnmarshalJSON(data); err != nil { return 0 }") + g.P("_, err := msg.MarshalJSON()") + g.P("if err != nil { panic(err) }") + g.P("return 1") + g.P("}") +} + +func emitFuzzTests(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("func FuzzProto", msg.GoIdent.GoName, "(f *", testingPackage.Ident("F"), ") {") + g.P("f.Fuzz(func(t *", testingPackage.Ident("T"), ", data []byte) {") + g.P("DoFuzzProto", msg.GoIdent.GoName, "(data)") + g.P("})}") + + g.P("func FuzzJSON", msg.GoIdent.GoName, "(f *", testingPackage.Ident("F"), ") {") + g.P("f.Fuzz(func(t *", testingPackage.Ident("T"), ", data []byte) {") + g.P("DoFuzzJSON", msg.GoIdent.GoName, "(data)") + g.P("})}") +} diff --git a/util/protogen/internal_gengo/getter.go b/util/protogen/internal_gengo/getter.go new file mode 100644 index 0000000..75fb2f9 --- /dev/null +++ b/util/protogen/internal_gengo/getter.go @@ -0,0 +1,14 @@ +package internal_gengo + +import "google.golang.org/protobuf/compiler/protogen" + +func emitGetterSetter(g *protogen.GeneratedFile, typeName string, fieldName string, fieldType string, defaultValue string) { + g.P("func (x *", typeName, ") Get", fieldName, "() ", fieldType, " {") + g.P("if x != nil { return x.", fieldName, "}") + g.P("return ", defaultValue) + g.P("}") + + g.P("func (x *", typeName, ") Set", fieldName, "(v ", fieldType, ") {") + g.P("x.", fieldName, " = v") + g.P("}") +} diff --git a/util/protogen/internal_gengo/json.go b/util/protogen/internal_gengo/json.go new file mode 100644 index 0000000..63773ed --- /dev/null +++ b/util/protogen/internal_gengo/json.go @@ -0,0 +1,211 @@ +package internal_gengo + +import ( + "fmt" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var ( + jwriterPackage = protogen.GoImportPath("github.com/mailru/easyjson/jwriter") + jlexerPackage = protogen.GoImportPath("github.com/mailru/easyjson/jlexer") +) + +func emitJSONMethods(g *protogen.GeneratedFile, msg *protogen.Message) { + emitJSONMarshal(g, msg) + emitJSONUnmarshal(g, msg) +} + +func emitJSONUnmarshal(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("// UnmarshalJSON implements the json.Unmarshaler interface.") + g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalJSON(data []byte) error {") + g.P("r := ", jlexerPackage.Ident("Lexer"), "{Data: data}") + g.P("x.UnmarshalEasyJSON(&r)") + g.P("return r.Error()") + g.P("}") + + g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalEasyJSON(in *", jlexerPackage.Ident("Lexer"), ") {") + + g.P("isTopLevel := in.IsStart()") + g.P("if in.IsNull() {") + g.P("if isTopLevel { in.Consumed() }") + g.P("in.Skip()") + g.P("return") + g.P("}") + + g.P("in.Delim('{')") + g.P("for !in.IsDelim('}') {") + + g.P("key := in.UnsafeFieldName(false)") + g.P("in.WantColon()") + g.P("if in.IsNull() { in.Skip(); in.WantComma(); continue }") + g.P("switch key {") + for _, f := range msg.Fields { + g.P(`case "`, fieldJSONName(f), `":`) + if f.Oneof != nil { + g.P("xx := new(", f.GoIdent, ")") + g.P("x." + f.Oneof.GoName + " = xx") + emitJSONFieldRead(g, f, "xx") + continue + } + emitJSONFieldRead(g, f, "x") + } + g.P("}") + g.P("in.WantComma()") + g.P("}") + g.P("in.Delim('}')") + g.P("if isTopLevel { in.Consumed() }") + g.P("}") +} + +func emitJSONFieldRead(g *protogen.GeneratedFile, f *protogen.Field, name string) { + g.P("{") + defer g.P("}") + + if f.Desc.IsList() { + g.P("var f ", fieldType(g, f)[2:]) + g.P("var list ", fieldType(g, f)) + g.P("in.Delim('[')") + defer g.P("in.Delim(']')") + + g.P("for !in.IsDelim(']') {") + } else { + g.P("var f ", fieldType(g, f)) + } + + var template string + switch f.Desc.Kind() { + case protoreflect.BoolKind: + template = "%s = in.Bool()" + case protoreflect.EnumKind: + template = "%s = " + fieldType(g, f).String() + "(in.Int32())" + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + template = "%s = in.Int32()" + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + template = "%s = in.Uint32()" + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + template = "%s = in.Int64()" + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + template = "%s = in.Uint64()" + case protoreflect.FloatKind: + template = "%s = in.Float32()" + case protoreflect.DoubleKind: + template = "%s = in.Float64()" + case protoreflect.StringKind: + template = "%s = in.String()" + case protoreflect.BytesKind: + template = "%s = in.Bytes()" + case protoreflect.MessageKind: + if f.Desc.IsList() { + g.P("f = new(", fieldType(g, f)[3:], ")") + } else { + g.P("f = new(", fieldType(g, f)[1:], ")") + } + template = "%s.UnmarshalEasyJSON(in)" + case protoreflect.GroupKind: + panic("unimplemented") + } + g.P(fmt.Sprintf(template, "f")) + if f.Desc.IsList() { + g.P("list = append(list, f)") + g.P("in.WantComma()") + g.P("}") + g.P(name, ".", f.GoName, " = list") + } else { + g.P(name, ".", f.GoName, " = f") + } +} + +func emitJSONMarshal(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("// MarshalJSON implements the json.Marshaler interface.") + g.P("func (x *", msg.GoIdent.GoName, ") MarshalJSON() ([]byte, error) {") + g.P("w := ", jwriterPackage.Ident("Writer"), "{}") + g.P("x.MarshalEasyJSON(&w)") + g.P("return w.Buffer.BuildBytes(), w.Error") + g.P("}") + + g.P("func (x *", msg.GoIdent.GoName, ") MarshalEasyJSON(out *", jwriterPackage.Ident("Writer"), ") {") + g.P(`if x == nil { out.RawString("null"); return }`) + + g.P("out.RawByte('{')") + for i, f := range msg.Fields { + if f.Oneof != nil { + if f.Oneof.Fields[0] != f { + continue + } + + g.P("switch xx := x.", f.Oneof.GoName, ".(type) {") + for _, ff := range f.Oneof.Fields { + g.P("case *", ff.GoIdent, ":") + emitJSONFieldWrite(g, ff, "xx", i == 0) + } + g.P("default:") + g.P(`out.RawString("null")`) + g.P("}") + continue + } + emitJSONFieldWrite(g, f, "x", i == 0) + } + g.P("out.RawByte('}')") + g.P("}") +} + +func emitJSONFieldWrite(g *protogen.GeneratedFile, f *protogen.Field, name string, first bool) { + g.P("{") + defer g.P("}") + + g.P("const prefix string = ", `",\"`, fieldJSONName(f), `\":"`) + if first { + g.P("out.RawString(prefix[1:])") + } else { + g.P("out.RawString(prefix)") + } + + selector := name + "." + f.GoName + if f.Desc.IsList() { + selector += "[i]" + g.P("out.RawByte('[')") + defer g.P("out.RawByte(']')") + + g.P("for i := range ", name, ".", f.GoName, " {") + g.P("if i != 0 { out.RawByte(',') }") + defer g.P("}") + } + + var template string + switch f.Desc.Kind() { + case protoreflect.BoolKind: + template = "out.Bool(%s)" + case protoreflect.EnumKind: + template = "out.Int32(int32(%s))" + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + template = "out.Int32(%s)" + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + template = "out.Uint32(%s)" + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + template = "out.Int64(%s)" + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + template = "out.Uint64(%s)" + case protoreflect.FloatKind: + template = "out.Float32(%s)" + case protoreflect.DoubleKind: + template = "out.Float64(%s)" + case protoreflect.StringKind: + template = "out.String(%s)" + case protoreflect.BytesKind: + template = "out.Base64Bytes(%s)" + case protoreflect.MessageKind: + template = "%s.MarshalEasyJSON(out)" + case protoreflect.GroupKind: + panic("unimplemented") + } + g.P(fmt.Sprintf(template, selector)) +} + +func fieldJSONName(f *protogen.Field) string { + if f.Desc.HasJSONName() { + return f.Desc.JSONName() + } + return string(f.Desc.Name()) +} diff --git a/util/protogen/internal_gengo/options.go b/util/protogen/internal_gengo/options.go new file mode 100644 index 0000000..bf781e6 --- /dev/null +++ b/util/protogen/internal_gengo/options.go @@ -0,0 +1,7 @@ +package internal_gengo + +type Options struct { + Fuzz bool `yaml:"fuzz"` + JSON bool `yaml:"json"` + MessageData []string `yaml:"message_data"` +} diff --git a/util/protogen/internal_gengo/proto.go b/util/protogen/internal_gengo/proto.go new file mode 100644 index 0000000..029bb31 --- /dev/null +++ b/util/protogen/internal_gengo/proto.go @@ -0,0 +1,240 @@ +package internal_gengo + +import ( + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func emitProtoMethods(g *protogen.GeneratedFile, msg *protogen.Message) { + emitMarshalProtobuf(g, msg) + emitUnmarshalProtobuf(g, msg) +} + +func emitUnmarshalProtobuf(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.") + g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalProtobuf(src []byte) (err error) {") + g.P("var fc ", easyprotoPackage.Ident("FieldContext")) + g.P("for len(src) > 0 {") + g.P("src, err = fc.NextField(src)") + g.P("if err != nil { return ", fmtPackage.Ident("Errorf"), `("cannot read next field in %s", "`, msg.GoIdent.GoName, `")}`) + g.P("switch fc.FieldNum {") + for _, f := range msg.Fields { + g.P("case ", f.Desc.Number(), ":", " // ", f.GoName) + emitFieldUnmarshal(g, f) + } + g.P("}") + g.P("}") + + // g.P("x.messageData = src") + g.P("return nil") + g.P("}") +} + +func emitFieldUnmarshal(g *protogen.GeneratedFile, f *protogen.Field) { + name := castFieldName(f) + + var getter string + switch f.Desc.Kind() { + case protoreflect.BoolKind: + getter = "Bool" + case protoreflect.EnumKind: + getter = "Int32" + case protoreflect.Int32Kind: + getter = "Int32" + case protoreflect.Sint32Kind: + getter = "Sint32" + case protoreflect.Uint32Kind: + getter = "Uint32" + case protoreflect.Int64Kind: + getter = "Int64" + case protoreflect.Sint64Kind: + getter = "Sint64" + case protoreflect.Uint64Kind: + getter = "Uint64" + case protoreflect.Sfixed32Kind: + getter = "Sfixed32" + case protoreflect.Fixed32Kind: + getter = "Fixed32" + case protoreflect.FloatKind: + getter = "Float" + case protoreflect.Sfixed64Kind: + getter = "Sfixed64" + case protoreflect.Fixed64Kind: + getter = "Fixed64" + case protoreflect.DoubleKind: + getter = "Double" + case protoreflect.StringKind: + getter = "String" + case protoreflect.BytesKind: + getter = "Bytes" + case protoreflect.MessageKind: + g.P("data, ok := fc.MessageData()") + g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`) + if f.Desc.IsList() { + g.P(name, " = append(", name, ", new(", fieldType(g, f)[3:], "))") + g.P("ff := ", name, "[len(", name, ")-1]") + name = "ff" + } else if f.Oneof != nil { + const tmp = "oneofField" + g.P(tmp, " := &", f.GoIdent, "{", f.GoName, ": ", "new(", fieldType(g, f)[1:], ")}") + defer g.P(name, " = ", tmp) + + name = tmp + "." + f.GoName + } else { + g.P(name, " = new(", fieldType(g, f)[1:], ")") + } + + g.P(`if err := `, name, `.UnmarshalProtobuf(data); err != nil { return fmt.Errorf("unmarshal: %w", err)}`) + return + case protoreflect.GroupKind: + panic("unimplemented") + } + + if f.Desc.IsList() && (f.Desc.Kind() == protoreflect.BytesKind || f.Desc.Kind() == protoreflect.StringKind) { + g.P("data, ok := fc.", getter, "()") + g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`) + g.P(name, " = append(", name, ", data)") + return + } + + if f.Desc.IsList() && (f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) { + g.P("data, ok := fc.", getter, "()") + g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`) + g.P(name, " = append(", name, ", data)") + return + } + + if f.Desc.IsList() { + g.P("data, ok := fc.Unpack", getter, "s(nil)") + } else { + g.P("data, ok := fc.", getter, "()") + } + + g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`) + value := "data" + if f.Desc.Kind() == protoreflect.EnumKind { + value = fieldType(g, f).String() + "(data)" + } + + if f.Oneof == nil { + g.P("x.", f.GoName, " = ", value) + } else { + g.P("x.", f.Oneof.GoName, " = &", f.GoIdent, "{", f.GoName, ": data}") + } +} + +func emitMarshalProtobuf(g *protogen.GeneratedFile, msg *protogen.Message) { + g.P("// MarshalProtobuf implements the encoding.ProtoMarshaler interface.") + g.P("func (x *", msg.GoIdent.GoName, ") MarshalProtobuf(dst []byte) []byte {") + g.P("m := ", mp, ".Get()") + g.P("defer ", mp, ".Put(m)") + g.P("x.EmitProtobuf(m.MessageMarshaler())") + g.P("dst = m.Marshal(dst)") + g.P("return dst") + g.P("}\n") + + g.P("func (x *", msg.GoIdent.GoName, ") EmitProtobuf(mm *", easyprotoPackage.Ident("MessageMarshaler"), ") {") + if len(msg.Fields) != 0 { + fs := sortFields(msg.Fields) + + g.P("if x == nil { return }") + for _, f := range fs { + emitFieldMarshal(g, f) + } + } + g.P("}") +} + +func emitFieldMarshal(g *protogen.GeneratedFile, f *protogen.Field) { + name := castFieldName(f) + if f.Oneof != nil { + name = "x." + f.Oneof.GoName + g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {") + defer g.P("}") + name = "inner." + f.GoName + } + + cond := "!= 0" + method := "" + switch f.Desc.Kind() { + case protoreflect.BoolKind: + cond = "" + method = "AppendBool" + case protoreflect.EnumKind: + method = "AppendInt32" + case protoreflect.Int32Kind: + method = "AppendInt32" + case protoreflect.Sint32Kind: + method = "AppendSint32" + case protoreflect.Uint32Kind: + method = "AppendUint32" + case protoreflect.Int64Kind: + method = "AppendInt64" + case protoreflect.Sint64Kind: + method = "AppendSint64" + case protoreflect.Uint64Kind: + method = "AppendUint64" + case protoreflect.Sfixed32Kind: + method = "AppendSfixed32" + case protoreflect.Fixed32Kind: + method = "AppendFixed32" + case protoreflect.FloatKind: + method = "AppendFloat" + case protoreflect.Sfixed64Kind: + method = "AppendSfixed64" + case protoreflect.Fixed64Kind: + method = "AppendFixed64" + case protoreflect.DoubleKind: + method = "AppendDouble" + case protoreflect.StringKind: + cond = `!= ""` + method = "AppendString" + case protoreflect.BytesKind: + cond = `!= nil` + method = "AppendBytes" + case protoreflect.MessageKind: + if f.Desc.IsList() { + g.P("for i := range ", name, " {") + defer g.P("}") + + name += "[i]" + } + + g.P("if ", name, " != nil && ", name, ".StableSize() != 0 {") + g.P(name, ".EmitProtobuf(mm.AppendMessage(", f.Desc.Number(), "))") + g.P("}") + return + case protoreflect.GroupKind: + panic("unimplemented") + } + + if f.Desc.IsList() && (f.Desc.Kind() == protoreflect.BytesKind || f.Desc.Kind() == protoreflect.StringKind) { + g.P("if ", name, " != nil {") + g.P("for j := range ", name, " {") + name += "[j]" + if f.Desc.Kind() == protoreflect.BytesKind { + g.P("mm.AppendBytes(", f.Desc.Number(), ", ", name, ")") + } else { + g.P("mm.AppendString(", f.Desc.Number(), ", ", name, ")") + } + g.P("}") + g.P("}") + return + } + if f.Desc.IsList() && (f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) { + g.P("if ", name, " != nil {") + g.P("for j := range ", name, " {") + name += "[j]" + g.P("mm.AppendUint64(", f.Desc.Number(), ", ", name, ")") + g.P("}") + g.P("}") + return + } + if f.Desc.IsList() { + method += "s" + cond = "!= nil" + } + g.P("if ", name, " ", cond, " {") + g.P("mm.", method, "(", f.Desc.Number(), ", ", name, ")") + g.P("}") +} diff --git a/util/protogen/internal_gengo/proto_field_type.go b/util/protogen/internal_gengo/proto_field_type.go new file mode 100644 index 0000000..9231f8f --- /dev/null +++ b/util/protogen/internal_gengo/proto_field_type.go @@ -0,0 +1,56 @@ +package internal_gengo + +import ( + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type structField string + +func (f structField) String() string { + return string(f) +} + +func (f structField) PointerTo() structField { + return "*" + f +} + +func (f structField) SliceOf() structField { + return "[]" + f +} + +func fieldType(g *protogen.GeneratedFile, field *protogen.Field) structField { + var typ structField + switch field.Desc.Kind() { + case protoreflect.BoolKind: + typ = "bool" + case protoreflect.EnumKind: + typ = structField(g.QualifiedGoIdent(field.Enum.GoIdent)) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + typ = "int32" + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + typ = "uint32" + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + typ = "int64" + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + typ = "uint64" + case protoreflect.FloatKind: + typ = "float32" + case protoreflect.DoubleKind: + typ = "float64" + case protoreflect.StringKind: + typ = "string" + case protoreflect.BytesKind: + typ = "[]byte" + case protoreflect.MessageKind: + typ = structField(g.QualifiedGoIdent(field.Message.GoIdent)).PointerTo() + case protoreflect.GroupKind: + panic("unimplemented") + } + + if field.Desc.IsList() { + typ = "[]" + typ + } + + return typ +} diff --git a/util/protogen/internal_gengo/proto_stable_compat.go b/util/protogen/internal_gengo/proto_stable_compat.go new file mode 100644 index 0000000..d93a161 --- /dev/null +++ b/util/protogen/internal_gengo/proto_stable_compat.go @@ -0,0 +1,124 @@ +package internal_gengo + +import ( + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var protowirePackage = protogen.GoImportPath("google.golang.org/protobuf/encoding/protowire") + +func emitStableSize(g *protogen.GeneratedFile, msg *protogen.Message) { + fs := sortFields(msg.Fields) + + g.P("// StableSize returns the size of x in protobuf format.") + g.P("//") + g.P("// Structures with the same field values have the same binary size.") + g.P("func (x *", msg.GoIdent.GoName, ") StableSize() (size int) {") + g.P("if x == nil { return 0 }") + if len(fs) != 0 { + for _, f := range fs { + if f.Desc.IsList() && marshalers[f.Desc.Kind()].RepeatedDouble && !(f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) { + g.P("var n int") + break + } + } + for _, f := range fs { + emitFieldSize(g, f) + } + } + g.P("return size") + g.P("}\n") +} + +func emitSignatureMethods(g *protogen.GeneratedFile, msg *protogen.Message) { + // SignedDataSize implementation (only for requests and responses). + g.P("// ReadSignedData fills buf with signed data of x.") + g.P("// If buffer length is less than x.SignedDataSize(), new buffer is allocated.") + g.P("//") + g.P("// Returns any error encountered which did not allow writing the data completely.") + g.P("// Otherwise, returns the buffer in which the data is written.") + g.P("//") + g.P("// Structures with the same field values have the same signed data.") + g.P("func (x *", msg.GoIdent.GoName, ") SignedDataSize() int {") + g.P("return x.GetBody().StableSize()") + g.P("}\n") + + // ReadSignedData implementation (only for requests and responses). + g.P("// SignedDataSize returns size of the request signed data in bytes.") + g.P("//") + g.P("// Structures with the same field values have the same signed data size.") + g.P("func (x *", msg.GoIdent.GoName, ") ReadSignedData(buf []byte) ([]byte, error) {") + g.P("return x.GetBody().MarshalProtobuf(buf), nil") + g.P("}\n") +} + +func emitFieldSize(g *protogen.GeneratedFile, f *protogen.Field) { + m := marshalers[f.Desc.Kind()] + if m.Prefix == "" { + g.P("// FIXME missing field marshaler: ", f.GoName, " of type ", f.Desc.Kind().String()) + g.P(`panic("unimplemented")`) + return + } + + name := castFieldName(f) + if f.Oneof != nil { + name = "x." + f.Oneof.GoName + g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {") + defer g.P("}") + name = "inner." + f.GoName + } + + switch { + case f.Desc.IsList() && (f.Desc.Kind() == protoreflect.MessageKind || f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()): + g.P("for i := range ", name, "{") + if f.Desc.Kind() == protoreflect.MessageKind { + g.P("size += proto.NestedStructureSize(", f.Desc.Number(), ", ", name, "[i])") + } else { + if f.Desc.Kind() != protoreflect.Uint64Kind { + panic("only uint64 unpacked primitive is supported") + } + + g.P("size += ", protowirePackage.Ident("SizeGroup"), "(", + protowirePackage.Ident("Number"), "(", f.Desc.Number(), "), ", + protowirePackage.Ident("SizeVarint"), "(", name, "[i]))") + } + g.P("}") + + case f.Desc.IsList(): + if m.RepeatedDouble { + g.P("n, _ = ", protoPackage.Ident("Repeated"+m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")") + g.P("size += n") + } else { + g.P("size += ", protoPackage.Ident("Repeated"+m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")") + } + default: + g.P("size += ", protoPackage.Ident(m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")") + } +} + +type marshalerDesc struct { + Prefix string + RepeatedDouble bool +} + +// Unused kinds are commented. +var marshalers = map[protoreflect.Kind]marshalerDesc{ + protoreflect.BoolKind: {Prefix: "Bool"}, + protoreflect.EnumKind: {Prefix: "Enum"}, + protoreflect.Int32Kind: {Prefix: "Int32"}, + // protoreflect.Sint32Kind: "", + protoreflect.Uint32Kind: {Prefix: "UInt32", RepeatedDouble: true}, + protoreflect.Int64Kind: {Prefix: "Int64", RepeatedDouble: true}, + // protoreflect.Sint64Kind: "", + protoreflect.Uint64Kind: {Prefix: "UInt64", RepeatedDouble: true}, + // protoreflect.Sfixed32Kind: "", + protoreflect.Fixed32Kind: {Prefix: "Fixed32", RepeatedDouble: true}, + // protoreflect.FloatKind: "", + // protoreflect.Sfixed64Kind: "", + protoreflect.Fixed64Kind: {Prefix: "Fixed64", RepeatedDouble: true}, + protoreflect.DoubleKind: {Prefix: "Float64"}, + protoreflect.StringKind: {Prefix: "String"}, + protoreflect.BytesKind: {Prefix: "Bytes"}, + protoreflect.MessageKind: {Prefix: "NestedStructure"}, + // protoreflect.GroupKind: "", +} diff --git a/util/protogen/main.go b/util/protogen/main.go index 85c6ded..f24712a 100644 --- a/util/protogen/main.go +++ b/util/protogen/main.go @@ -1,261 +1,35 @@ package main import ( - "sort" - "strings" + "flag" + "fmt" + "os" + "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/protogen/internal_gengo" "google.golang.org/protobuf/compiler/protogen" - "google.golang.org/protobuf/reflect/protoreflect" -) - -var ( - protowirePackage = protogen.GoImportPath("google.golang.org/protobuf/encoding/protowire") - binaryPackage = protogen.GoImportPath("encoding/binary") ) func main() { - protogen.Options{}.Run(func(gen *protogen.Plugin) error { + var flags flag.FlagSet + genFuzz := flags.Bool("fuzz", false, "generate fuzz tests") + yamlConfigPath := flags.String("config", "", "path to the configuration") + + protogen.Options{ + ParamFunc: flags.Set, + }.Run(func(gen *protogen.Plugin) error { + if *yamlConfigPath != "" { + s, e := os.Getwd() + fmt.Fprintln(os.Stderr, s, e) + data, err := os.ReadFile(*yamlConfigPath) + fmt.Fprintln(os.Stderr, string(data), err) + } + for _, f := range gen.Files { - //if !f.Generate { - // continue - //} - imp := string(f.GoImportPath) - if strings.HasSuffix(imp, "/tree") || strings.HasSuffix(imp, "/control") { - generateFile(gen, f) + internal_gengo.GenerateFile(gen, f) + if *genFuzz { + internal_gengo.GenerateFuzzTests(gen, f) } } return nil }) } - -// generateFile generates a *.pb.go file enforcing field-order serialization. -func generateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile { - filename := file.GeneratedFilenamePrefix + "_frostfs.pb.go" - g := gen.NewGeneratedFile(filename, file.GoImportPath) - g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.") - g.P() - g.P("package ", file.GoPackageName) - g.P() - g.P(`import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"`) - - //for _, e := range file.Enums { - // g.P("type " + e.GoIdent.GoName + " int32") - // g.P("const (") - // for _, ev := range e.Values { - // g.P(ev.GoIdent.GoName, " = ", ev.Desc.Number()) - // } - // g.P(")") - //} - for _, msg := range file.Messages { - emitMessage(g, msg) - } - return g -} - -func emitMessage(g *protogen.GeneratedFile, msg *protogen.Message) { - for _, inner := range msg.Messages { - emitMessage(g, inner) - } - - fs := sortFields(msg.Fields) - - // StableSize implementation. - g.P("// StableSize returns the size of x in protobuf format.") - g.P("//") - g.P("// Structures with the same field values have the same binary size.") - g.P("func (x *", msg.GoIdent.GoName, ") StableSize() (size int) {") - g.P("if x == nil { return 0 }") - if len(fs) != 0 { - for _, f := range fs { - if f.Desc.IsList() && marshalers[f.Desc.Kind()].RepeatedDouble && !(f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) { - g.P("var n int") - break - } - } - for _, f := range fs { - emitFieldSize(g, f) - } - } - g.P("return size") - g.P("}\n") - - // StableMarshal implementation. - g.P("// StableMarshal marshals x in protobuf binary format with stable field order.") - g.P("//") - g.P("// If buffer length is less than x.StableSize(), new buffer is allocated.") - g.P("//") - g.P("// Returns any error encountered which did not allow writing the data completely.") - g.P("// Otherwise, returns the buffer in which the data is written.") - g.P("//") - g.P("// Structures with the same field values have the same binary format.") - g.P("func (x *", msg.GoIdent.GoName, ") StableMarshal(buf []byte) []byte {") - if len(fs) != 0 { - g.P("if x == nil { return []byte{} }") - g.P("if buf == nil { buf = make([]byte, x.StableSize()) }") - g.P("var offset int") - for _, f := range fs { - emitFieldMarshal(g, f) - } - } - g.P("return buf") - g.P("}\n") - - if strings.HasSuffix(msg.GoIdent.GoName, "Request") || strings.HasSuffix(msg.GoIdent.GoName, "Response") { - // SignedDataSize implementation (only for requests and responses). - g.P("// ReadSignedData fills buf with signed data of x.") - g.P("// If buffer length is less than x.SignedDataSize(), new buffer is allocated.") - g.P("//") - g.P("// Returns any error encountered which did not allow writing the data completely.") - g.P("// Otherwise, returns the buffer in which the data is written.") - g.P("//") - g.P("// Structures with the same field values have the same signed data.") - g.P("func (x *", msg.GoIdent.GoName, ") SignedDataSize() int {") - g.P("return x.GetBody().StableSize()") - g.P("}\n") - - // ReadSignedData implementation (only for requests and responses). - g.P("// SignedDataSize returns size of the request signed data in bytes.") - g.P("//") - g.P("// Structures with the same field values have the same signed data size.") - g.P("func (x *", msg.GoIdent.GoName, ") ReadSignedData(buf []byte) ([]byte, error) {") - g.P("return x.GetBody().StableMarshal(buf), nil") - g.P("}\n") - - // Signature setters and getters. - g.P("func (x *", msg.GoIdent.GoName, ") SetSignature(sig *Signature) {") - g.P("x.Signature = sig") - g.P("}\n") - } -} - -func emitFieldSize(g *protogen.GeneratedFile, f *protogen.Field) { - m := marshalers[f.Desc.Kind()] - if m.Prefix == "" { - g.P("// FIXME missing field marshaler: ", f.GoName, " of type ", f.Desc.Kind().String()) - g.P(`panic("unimplemented")`) - return - } - - name := castFieldName(f) - if f.Oneof != nil { - name = "x." + f.Oneof.GoName - g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {") - defer g.P("}") - name = "inner." + f.GoName - } - - switch { - case f.Desc.IsList() && (f.Desc.Kind() == protoreflect.MessageKind || f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()): - g.P("for i := range ", name, "{") - if f.Desc.Kind() == protoreflect.MessageKind { - g.P("size += proto.NestedStructureSize(", f.Desc.Number(), ", ", name, "[i])") - } else { - if f.Desc.Kind() != protoreflect.Uint64Kind { - panic("only uint64 unpacked primitive is supported") - } - - g.P("size += ", protowirePackage.Ident("SizeGroup"), "(", - protowirePackage.Ident("Number"), "(", f.Desc.Number(), "), ", - protowirePackage.Ident("SizeVarint"), "(", name, "[i]))") - } - g.P("}") - case f.Desc.IsList(): - if m.RepeatedDouble { - g.P("n, _ = proto.Repeated", m.Prefix, "Size(", f.Desc.Number(), ", ", name, ")") - g.P("size += n") - } else { - g.P("size += proto.Repeated", m.Prefix, "Size(", f.Desc.Number(), ", ", name, ")") - } - default: - g.P("size += proto.", m.Prefix, "Size(", f.Desc.Number(), ", ", name, ")") - } -} - -func emitFieldMarshal(g *protogen.GeneratedFile, f *protogen.Field) { - m := marshalers[f.Desc.Kind()] - if m.Prefix == "" { - g.P("// FIXME missing field marshaler: ", f.GoName, " of type ", f.Desc.Kind().String()) - g.P(`panic("unimplemented")`) - return - } - - name := castFieldName(f) - if f.Oneof != nil { - name = "x." + f.Oneof.GoName - g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {") - defer g.P("}") - name = "inner." + f.GoName - } - - prefix := m.Prefix - if f.Desc.IsList() { - prefix = "Repeated" + m.Prefix - } - switch { - case f.Desc.IsList() && (f.Desc.Kind() == protoreflect.MessageKind || f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()): - g.P("for i := range ", name, "{") - if f.Desc.Kind() == protoreflect.MessageKind { - g.P("offset += proto.NestedStructureMarshal(", f.Desc.Number(), ", buf[offset:], ", name, "[i])") - } else { - if f.Desc.Kind() != protoreflect.Uint64Kind { - panic("only uint64 unpacked primitive is supported") - } - g.P("{") - g.P("prefix := ", protowirePackage.Ident("EncodeTag"), "(", - protowirePackage.Ident("Number"), "(", f.Desc.Number(), "), ", - protowirePackage.Ident("VarintType"), ")") - g.P("offset += ", binaryPackage.Ident("PutUvarint"), "(buf[offset:], uint64(prefix))") - g.P("offset += ", binaryPackage.Ident("PutUvarint"), "(buf[offset:], ", name, "[i])") - g.P("}") - } - g.P("}") - case f.Desc.IsList(): - g.P("offset += proto.Repeated", m.Prefix, "Marshal(", f.Desc.Number(), ", buf[offset:], ", name, ")") - default: - g.P("offset += proto.", prefix, "Marshal(", f.Desc.Number(), ", buf[offset:], ", name, ")") - } -} - -func castFieldName(f *protogen.Field) string { - name := "x." + f.GoName - if f.Desc.Kind() != protoreflect.EnumKind { - return name - } - return "int32(" + name + ")" -} - -type marshalerDesc struct { - Prefix string - RepeatedDouble bool -} - -// Unused kinds are commented. -var marshalers = map[protoreflect.Kind]marshalerDesc{ - protoreflect.BoolKind: {Prefix: "Bool"}, - protoreflect.EnumKind: {Prefix: "Enum"}, - // protoreflect.Int32Kind: "", - // protoreflect.Sint32Kind: "", - protoreflect.Uint32Kind: {Prefix: "UInt32", RepeatedDouble: true}, - protoreflect.Int64Kind: {Prefix: "Int64", RepeatedDouble: true}, - // protoreflect.Sint64Kind: "", - protoreflect.Uint64Kind: {Prefix: "UInt64", RepeatedDouble: true}, - // protoreflect.Sfixed32Kind: "", - protoreflect.Fixed32Kind: {Prefix: "Fixed32", RepeatedDouble: true}, - // protoreflect.FloatKind: "", - // protoreflect.Sfixed64Kind: "", - protoreflect.Fixed64Kind: {Prefix: "Fixed64", RepeatedDouble: true}, - protoreflect.DoubleKind: {Prefix: "Float64"}, - protoreflect.StringKind: {Prefix: "String"}, - protoreflect.BytesKind: {Prefix: "Bytes"}, - protoreflect.MessageKind: {Prefix: "NestedStructure"}, - // protoreflect.GroupKind: "", -} - -func sortFields(fs []*protogen.Field) []*protogen.Field { - res := make([]*protogen.Field, len(fs)) - copy(res, fs) - sort.Slice(res, func(i, j int) bool { - return res[i].Desc.Number() < res[j].Desc.Number() - }) - return res -} diff --git a/util/signature/data.go b/util/signature/data.go index 5e7c310..62c3eaf 100644 --- a/util/signature/data.go +++ b/util/signature/data.go @@ -63,12 +63,6 @@ func SignDataWithHandler(key *ecdsa.PrivateKey, src DataSource, handler KeySigna } func VerifyDataWithSource(dataSrc DataSource, sigSrc KeySignatureSource, opts ...SignOption) error { - cfg := defaultCfg() - - for i := range opts { - opts[i](cfg) - } - buffer := buffersPool.Get(uint32(dataSrc.SignedDataSize())) defer buffersPool.Put(buffer) @@ -77,7 +71,7 @@ func VerifyDataWithSource(dataSrc DataSource, sigSrc KeySignatureSource, opts .. return err } - return verify(cfg, data, sigSrc()) + return VerifyDataSlice(data, sigSrc, opts...) } func SignData(key *ecdsa.PrivateKey, v DataWithSignature, opts ...SignOption) error { @@ -87,3 +81,13 @@ func SignData(key *ecdsa.PrivateKey, v DataWithSignature, opts ...SignOption) er func VerifyData(src DataWithSignature, opts ...SignOption) error { return VerifyDataWithSource(src, src.GetSignature, opts...) } + +func VerifyDataSlice(data []byte, sigSrc KeySignatureSource, opts ...SignOption) error { + cfg := defaultCfg() + + for i := range opts { + opts[i](cfg) + } + + return verify(cfg, data, sigSrc()) +}