@@ -2,6 +2,7 @@ package assetpath
2
2
3
3
import (
4
4
"net/url"
5
+ "path"
5
6
"strings"
6
7
"testing"
7
8
@@ -13,8 +14,8 @@ import (
13
14
"github.com/grafana/grafana/pkg/plugins/pluginscdn"
14
15
)
15
16
16
- func extPath ( pluginID string ) * fakes.FakePluginFiles {
17
- return fakes .NewFakePluginFiles ( pluginID )
17
+ func pluginFS ( basePath string ) * fakes.FakePluginFS {
18
+ return fakes .NewFakePluginFS ( basePath )
18
19
}
19
20
20
21
func TestService (t * testing.T ) {
@@ -45,7 +46,7 @@ func TestService(t *testing.T) {
45
46
}
46
47
svc := ProvideService (cfg , pluginscdn .ProvideService (cfg ))
47
48
48
- tableOldFS := fakes .NewFakePluginFiles ("/grafana/public/app/plugins/panel/table-old" )
49
+ tableOldFS := fakes .NewFakePluginFS ("/grafana/public/app/plugins/panel/table-old" )
49
50
jsonData := map [string ]plugins.JSONData {
50
51
"table-old" : {ID : "table-old" , Info : plugins.Info {Version : "1.0.0" }},
51
52
@@ -60,37 +61,75 @@ func TestService(t *testing.T) {
60
61
})
61
62
62
63
t .Run ("Base" , func (t * testing.T ) {
63
- base , err := svc .Base (NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , extPath ("one" )))
64
+ base , err := svc .Base (NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , pluginFS ("one" ), nil ))
64
65
require .NoError (t , err )
65
66
66
- u , err := url .JoinPath (tc .cdnBaseURL , "/one/1.0.0/public/plugins/one" )
67
+ oneCDNURL , err := url .JoinPath (tc .cdnBaseURL , "/one/1.0.0/public/plugins/one" )
67
68
require .NoError (t , err )
68
- require .Equal (t , u , base )
69
+ require .Equal (t , oneCDNURL , base )
69
70
70
- base , err = svc .Base (NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , extPath ("two" )))
71
+ base , err = svc .Base (NewPluginInfo (jsonData ["one" ], plugins .ClassCDN , pluginFS (oneCDNURL ), nil ))
72
+ require .NoError (t , err )
73
+ require .Equal (t , oneCDNURL , base )
74
+
75
+ base , err = svc .Base (NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , pluginFS ("two" ), nil ))
71
76
require .NoError (t , err )
72
77
require .Equal (t , "public/plugins/two" , base )
73
78
74
- base , err = svc .Base (NewPluginInfo (jsonData ["table-old" ], plugins .ClassCore , tableOldFS ))
79
+ base , err = svc .Base (NewPluginInfo (jsonData ["table-old" ], plugins .ClassCore , tableOldFS , nil ))
75
80
require .NoError (t , err )
76
81
require .Equal (t , "public/app/plugins/table-old" , base )
82
+
83
+ parentFS := pluginFS (oneCDNURL )
84
+ parentFS .RelFunc = func (_ string ) (string , error ) {
85
+ return "child-plugins/two" , nil
86
+ }
87
+ parent := NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , parentFS , nil )
88
+ child := NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , fakes .NewFakePluginFS ("" ), & parent )
89
+ base , err = svc .Base (child )
90
+ require .NoError (t , err )
91
+
92
+ childBase , err := url .JoinPath (oneCDNURL , "child-plugins/two" )
93
+ require .NoError (t , err )
94
+ require .Equal (t , childBase , base )
77
95
})
78
96
79
97
t .Run ("Module" , func (t * testing.T ) {
80
- module , err := svc .Module (NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , extPath ("one" )))
98
+ module , err := svc .Module (NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , pluginFS ("one" ), nil ))
81
99
require .NoError (t , err )
82
100
83
- u , err := url .JoinPath (tc .cdnBaseURL , "/one/1.0.0/public/plugins/one/module.js " )
101
+ oneCDNURL , err := url .JoinPath (tc .cdnBaseURL , "/one/1.0.0/public/plugins/one" )
84
102
require .NoError (t , err )
85
- require .Equal (t , u , module )
86
103
87
- module , err = svc .Module (NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , extPath ("two" )))
104
+ oneCDNModuleURL , err := url .JoinPath (oneCDNURL , "module.js" )
105
+ require .NoError (t , err )
106
+ require .Equal (t , oneCDNModuleURL , module )
107
+
108
+ fs := pluginFS ("one" )
109
+ module , err = svc .Module (NewPluginInfo (jsonData ["one" ], plugins .ClassCDN , fs , nil ))
110
+ require .NoError (t , err )
111
+ require .Equal (t , path .Join (fs .Base (), "module.js" ), module )
112
+
113
+ module , err = svc .Module (NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , pluginFS ("two" ), nil ))
88
114
require .NoError (t , err )
89
115
require .Equal (t , "public/plugins/two/module.js" , module )
90
116
91
- module , err = svc .Module (NewPluginInfo (jsonData ["table-old" ], plugins .ClassCore , tableOldFS ))
117
+ module , err = svc .Module (NewPluginInfo (jsonData ["table-old" ], plugins .ClassCore , tableOldFS , nil ))
92
118
require .NoError (t , err )
93
119
require .Equal (t , "core:plugin/table-old" , module )
120
+
121
+ parentFS := pluginFS (oneCDNURL )
122
+ parentFS .RelFunc = func (_ string ) (string , error ) {
123
+ return "child-plugins/two" , nil
124
+ }
125
+ parent := NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , parentFS , nil )
126
+ child := NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , fakes .NewFakePluginFS ("" ), & parent )
127
+ module , err = svc .Module (child )
128
+ require .NoError (t , err )
129
+
130
+ childModule , err := url .JoinPath (oneCDNURL , "child-plugins/two/module.js" )
131
+ require .NoError (t , err )
132
+ require .Equal (t , childModule , module )
94
133
})
95
134
96
135
t .Run ("RelativeURL" , func (t * testing.T ) {
@@ -103,24 +142,47 @@ func TestService(t *testing.T) {
103
142
},
104
143
}
105
144
106
- u , err := svc .RelativeURL (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , extPath ("one" )), "" )
145
+ u , err := svc .RelativeURL (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , pluginFS ("one" ), nil ), "" )
107
146
require .NoError (t , err )
108
147
// given an empty path, base URL will be returned
109
- baseURL , err := svc .Base (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , extPath ("one" )))
148
+ baseURL , err := svc .Base (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , pluginFS ("one" ), nil ))
110
149
require .NoError (t , err )
111
150
require .Equal (t , baseURL , u )
112
151
113
- u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , extPath ("one" )), "path/to/file.txt" )
152
+ u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassExternal , pluginFS ("one" ), nil ), "path/to/file.txt" )
114
153
require .NoError (t , err )
115
154
require .Equal (t , strings .TrimRight (tc .cdnBaseURL , "/" )+ "/one/1.0.0/public/plugins/one/path/to/file.txt" , u )
116
155
117
- u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["two" ].JSONData , plugins .ClassExternal , extPath ("two" )), "path/to/file.txt" )
156
+ u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["two" ].JSONData , plugins .ClassExternal , pluginFS ("two" ), nil ), "path/to/file.txt" )
118
157
require .NoError (t , err )
119
158
require .Equal (t , "public/plugins/two/path/to/file.txt" , u )
120
159
121
- u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["two" ].JSONData , plugins .ClassExternal , extPath ("two" )), "default" )
160
+ u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["two" ].JSONData , plugins .ClassExternal , pluginFS ("two" ), nil ), "default" )
122
161
require .NoError (t , err )
123
162
require .Equal (t , "public/plugins/two/default" , u )
163
+
164
+ oneCDNURL , err := url .JoinPath (tc .cdnBaseURL , "/one/1.0.0/public/plugins/one" )
165
+ require .NoError (t , err )
166
+
167
+ u , err = svc .RelativeURL (NewPluginInfo (pluginsMap ["one" ].JSONData , plugins .ClassCDN , pluginFS (oneCDNURL ), nil ), "path/to/file.txt" )
168
+ require .NoError (t , err )
169
+
170
+ oneCDNRelativeURL , err := url .JoinPath (oneCDNURL , "path/to/file.txt" )
171
+ require .NoError (t , err )
172
+ require .Equal (t , oneCDNRelativeURL , u )
173
+
174
+ parentFS := pluginFS (oneCDNURL )
175
+ parentFS .RelFunc = func (_ string ) (string , error ) {
176
+ return "child-plugins/two" , nil
177
+ }
178
+ parent := NewPluginInfo (jsonData ["one" ], plugins .ClassExternal , parentFS , nil )
179
+ child := NewPluginInfo (jsonData ["two" ], plugins .ClassExternal , fakes .NewFakePluginFS ("" ), & parent )
180
+ u , err = svc .RelativeURL (child , "path/to/file.txt" )
181
+ require .NoError (t , err )
182
+
183
+ oneCDNRelativeURL , err = url .JoinPath (oneCDNURL , "child-plugins/two/path/to/file.txt" )
184
+ require .NoError (t , err )
185
+ require .Equal (t , oneCDNRelativeURL , u )
124
186
})
125
187
})
126
188
}
0 commit comments