test for resources cleanup
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / integration / FeedReaderTest.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package jetbrains.buildServer.nuget.tests.integration;\r
18 \r
19 import jetbrains.buildServer.BaseTestCase;\r
20 import jetbrains.buildServer.nuget.server.feed.reader.FeedConstants;\r
21 import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
22 import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;\r
23 import jetbrains.buildServer.nuget.server.feed.reader.impl.*;\r
24 import jetbrains.buildServer.util.FileUtil;\r
25 import jetbrains.buildServer.util.SimpleHttpServerBase;\r
26 import org.testng.Assert;\r
27 import org.testng.annotations.AfterMethod;\r
28 import org.testng.annotations.BeforeMethod;\r
29 import org.testng.annotations.Test;\r
30 \r
31 import java.io.*;\r
32 import java.util.Arrays;\r
33 import java.util.Collection;\r
34 import java.util.zip.ZipEntry;\r
35 import java.util.zip.ZipInputStream;\r
36 \r
37 /**\r
38  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
39  * Date: 11.08.11 16:04\r
40  */\r
41 public class FeedReaderTest extends BaseTestCase {\r
42   private NuGetFeedReader myReader;\r
43   private FeedHttpClientHolder myClient;\r
44 \r
45   @BeforeMethod\r
46   @Override\r
47   protected void setUp() throws Exception {\r
48     super.setUp();\r
49     myClient = new FeedHttpClientHolder();\r
50     final FeedGetMethodFactory methods = new FeedGetMethodFactory();\r
51     myReader = new NuGetFeedReaderImpl(myClient, new UrlResolverImpl(myClient, methods), methods, new PackagesFeedParserImpl());\r
52   }\r
53 \r
54   @AfterMethod\r
55   @Override\r
56   protected void tearDown() throws Exception {\r
57     super.tearDown();\r
58     myClient.dispose();\r
59   }\r
60 \r
61   @Test\r
62   public void testRead() throws IOException {\r
63     final Collection<FeedPackage> feedPackages = myReader.queryPackageVersions(FeedConstants.FEED_URL, "NuGet.CommandLine");\r
64     Assert.assertTrue(feedPackages.size() > 0);\r
65 \r
66     boolean hasLatest = false;\r
67     for (FeedPackage feedPackage : feedPackages) {\r
68       Assert.assertFalse(hasLatest && feedPackage.isLatestVersion(), "There could be only one latest");\r
69       hasLatest |= feedPackage.isLatestVersion();\r
70       System.out.println("feedPackage = " + feedPackage);\r
71     }\r
72   }\r
73 \r
74   @Test\r
75   public void testDownloadLatest() throws IOException {\r
76     final Collection<FeedPackage> packages = myReader.queryPackageVersions(FeedConstants.FEED_URL, "NuGet.CommandLine");\r
77     FeedPackage latest = null;\r
78     for (FeedPackage aPackage : packages) {\r
79       if (aPackage.isLatestVersion()) {\r
80         latest = aPackage;\r
81       }\r
82     }\r
83     Assert.assertNotNull(latest, "there should be the latest package");\r
84 \r
85     final File pkd = createTempFile();\r
86     myReader.downloadPackage(latest, pkd);\r
87 \r
88     Assert.assertTrue(pkd.length() > 100);\r
89     boolean hasNuGetExe = false;\r
90     ZipInputStream zip = new ZipInputStream(new BufferedInputStream(new FileInputStream(pkd)));\r
91     try {\r
92       for (ZipEntry ze = zip.getNextEntry(); ze != null; ze = zip.getNextEntry()) {\r
93         String name = ze.getName();\r
94         System.out.println("ze = " + name);\r
95         name = name.toLowerCase();\r
96         hasNuGetExe |= name.endsWith("/NuGet.exe".toLowerCase());\r
97         hasNuGetExe |= name.endsWith("\\NuGet.exe".toLowerCase());\r
98       }\r
99     } finally {\r
100       FileUtil.close(zip);\r
101     }\r
102 \r
103     Assert.assertTrue(hasNuGetExe, "package should contain nuget.exe");\r
104   }\r
105 \r
106 \r
107   @Test\r
108   public void test_connection_leaks() throws Exception {\r
109     final SimpleHttpServerBase server = new SimpleHttpServerBase(){\r
110       @Override\r
111       protected Response getResponse(String s) {\r
112         if (s.startsWith("GET /aaa")) {\r
113           return redirectedResponse("bbb");\r
114         }\r
115         if (s.startsWith("GET /bbb")) {\r
116           return redirectedResponse("ccc");\r
117         }\r
118         if (s.startsWith("GET /ccc")) {\r
119           return redirectedResponse("ddd");\r
120         }\r
121         if (s.startsWith("GET /ddd")) {\r
122           return redirectedResponse("qqq");\r
123         }\r
124         if (s.startsWith("GET /qqq")) {\r
125           return new Response("HTTP/1.0 200 Ok", Arrays.asList("Encoding: utf-8", "Content-Type: text/xml")) {\r
126             @Override\r
127             public void printContent(PrintStream printStream) throws IOException {\r
128               final File path = Paths.getTestDataPath("feed/reader/feed-response.xml");\r
129               InputStream fis = new BufferedInputStream(new FileInputStream(path));\r
130               FileUtil.copyStreams(fis, printStream);\r
131             }\r
132 \r
133             @Override\r
134             public Integer getLength() {\r
135               return null;\r
136             }\r
137           };\r
138         }\r
139         return null;\r
140       }\r
141 \r
142       private Response redirectedResponse(String next) {\r
143         final String url = "http://localhost:" + getPort() + "/" + next;\r
144         return new Response("HTTP/1.0 301 Moved", Arrays.asList("Location: " + url)) {\r
145           @Override\r
146           public void printContent(PrintStream printStream) throws IOException {\r
147           }\r
148 \r
149           @Override\r
150           public Integer getLength() {\r
151             return null;\r
152           }\r
153         };\r
154       }\r
155     };\r
156 \r
157     server.start();\r
158     try {\r
159       for(int i = 0; i <100; i++) {\r
160         myReader.queryPackageVersions("http://localhost:" + server.getPort() + "/aaa", "NuGet");\r
161       }\r
162     } finally {\r
163       server.stop();\r
164     }\r
165   }\r
166 }\r