@@ -96,33 +96,47 @@ func Test_proxyOnHttpCallResponse(t *testing.T) {
96
96
97
97
var (
98
98
pluginContextID uint32 = 1
99
+ callerContextID uint32 = 100
99
100
callOutID uint32 = 10
100
101
)
101
102
102
103
currentStateMux .Lock ()
103
104
defer currentStateMux .Unlock ()
104
105
105
- ctx := & l7Context {}
106
- currentState = & state {
107
- pluginContexts : map [uint32 ]* pluginContextState {pluginContextID : {
108
- httpCallbacks : map [uint32 ]* httpCallbackAttribute {callOutID : {callback : ctx .OnHttpCallResponse }},
109
- }},
110
- }
111
-
112
- proxyOnHttpCallResponse (pluginContextID , callOutID , 0 , 0 , 0 )
113
- _ , ok := currentState .pluginContexts [pluginContextID ].httpCallbacks [callOutID ]
114
- require .False (t , ok )
115
- require .True (t , ctx .onHttpCallResponse )
116
-
117
- ctx = & l7Context {}
118
- currentState = & state {
119
- pluginContexts : map [uint32 ]* pluginContextState {pluginContextID : {
120
- httpCallbacks : map [uint32 ]* httpCallbackAttribute {callOutID : {callback : ctx .OnHttpCallResponse }},
121
- }},
122
- }
123
-
124
- proxyOnHttpCallResponse (pluginContextID , callOutID , 0 , 0 , 0 )
125
- _ , ok = currentState .pluginContexts [pluginContextID ].httpCallbacks [callOutID ]
126
- require .False (t , ok )
127
- require .True (t , ctx .onHttpCallResponse )
106
+ t .Run ("normal" , func (t * testing.T ) {
107
+ ctx := & l7Context {}
108
+ currentState = & state {
109
+ pluginContexts : map [uint32 ]* pluginContextState {pluginContextID : {
110
+ httpCallbacks : map [uint32 ]* httpCallbackAttribute {callOutID : {callback : ctx .OnHttpCallResponse , callerContextID : callerContextID }},
111
+ }},
112
+ contextIDToRootID : map [uint32 ]uint32 {callerContextID : pluginContextID },
113
+ }
114
+
115
+ proxyOnHttpCallResponse (pluginContextID , callOutID , 0 , 0 , 0 )
116
+ _ , ok := currentState .pluginContexts [pluginContextID ].httpCallbacks [callOutID ]
117
+ require .False (t , ok )
118
+ require .True (t , ctx .onHttpCallResponse )
119
+ })
120
+
121
+ t .Run ("delete before callback" , func (t * testing.T ) {
122
+ ctx := & l7Context {}
123
+ currentState = & state {
124
+ pluginContexts : map [uint32 ]* pluginContextState {pluginContextID : {
125
+ httpCallbacks : map [uint32 ]* httpCallbackAttribute {callOutID : {callback : ctx .OnHttpCallResponse , callerContextID : callerContextID }},
126
+ }},
127
+ httpContexts : map [uint32 ]types.HttpContext {callerContextID : nil },
128
+ contextIDToRootID : map [uint32 ]uint32 {callerContextID : pluginContextID },
129
+ }
130
+
131
+ proxyOnDelete (callerContextID )
132
+
133
+ proxyOnHttpCallResponse (pluginContextID , callOutID , 0 , 0 , 0 )
134
+ _ , ok := currentState .pluginContexts [pluginContextID ].httpCallbacks [callOutID ]
135
+ require .False (t , ok )
136
+
137
+ // If the caller context is deleted before callback is called, then
138
+ // the callback shouldn't be called.
139
+ require .False (t , ctx .onHttpCallResponse )
140
+ })
141
+
128
142
}
0 commit comments