/* * Copyright 1998-2017 Linux.org.ru * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ru.org.linux.util; import org.apache.commons.httpclient.URI; import org.apache.commons.httpclient.URIException; import org.junit.Before; import org.junit.Test; import ru.org.linux.group.Group; import ru.org.linux.topic.Topic; import ru.org.linux.topic.TopicDao; import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class LorURITest { private TopicDao messageDao; private Topic message1; private Group group1; private Topic message2; private Group group2; private Topic message3; private Group group3; private Topic message12; private Group group12; private Topic message15; private Group group15; URI mainURI; // 127.0.0.1:8080 URI mainLORURI; // linux.org.ru private String url1 = "http://127.0.0.1:8080/news/debian/6753486#comment-6753612"; private String url1n = "http://127.0.0.1:8080/news/debian/6753486?cid=6753612"; private String url2 = "https://127.0.0.1:8080/forum/talks/6893165?lastmod=1319027964738"; private String url3 = "https://127.0.0.1:8080/forum/general/6890857/page2?lastmod=1319022386177#comment-6892917"; private String url4 = "https://127.0.0.1:8080/news"; // not message url private String url5 = "https://example.com"; // not lorsource url private String url6 = "http://127.0.0.1:8080/search.jsp?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"; // search url private String url7 = "http://127.0.0.1:8080/search.jsp?q=привет&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"; // search url unescaped private String failurl8 = "some crap"; private String failurl9 = ""; private String failurl10 = null; private String failurl11 = "127.0.0.1:8080/news/debian/6753486#comment-6753612"; private String url12 = "http://127.0.0.1:8080/forum/security/1948661?lastmod=1319623223360#comment-1948668"; private URI canon; @Before public void initTest() throws Exception { mainURI = new URI("http://127.0.0.1:8080/", true, "UTF-8"); mainLORURI = new URI("http://www.linux.org.ru/", true, "UTF-8"); canon = new URI("https://127.0.0.1:8085/", true); messageDao = mock(TopicDao.class); message1 = mock(Topic.class); group1 = mock(Group.class); message2 = mock(Topic.class); group2 = mock(Group.class); message3 = mock(Topic.class); group3 = mock(Group.class); message12 = mock(Topic.class); group12 = mock(Group.class); message15 = mock(Topic.class); group15 = mock(Group.class); when(group1.getUrl()).thenReturn("/news/debian/"); when(group2.getUrl()).thenReturn("/forum/talks/"); when(group3.getUrl()).thenReturn("/forum/general/"); when(group12.getUrl()).thenReturn("/forum/security/"); when(group15.getUrl()).thenReturn("/forum/linux-org-ru/"); when(messageDao.getGroup(message1)).thenReturn(group1); when(messageDao.getGroup(message2)).thenReturn(group2); when(messageDao.getGroup(message3)).thenReturn(group3); when(messageDao.getGroup(message12)).thenReturn(group12); when(messageDao.getGroup(message15)).thenReturn(group15); when(messageDao.getById(6753486)).thenReturn(message1); when(messageDao.getById(6893165)).thenReturn(message2); when(messageDao.getById(6890857)).thenReturn(message3); when(messageDao.getById(1948661)).thenReturn(message12); when(messageDao.getById(6944260)).thenReturn(message15); } @Test public void test1() throws Exception { LorURL lorURI = new LorURL(mainURI, url1); assertTrue(lorURI.isTrueLorUrl()); assertTrue(lorURI.isMessageUrl()); assertTrue(lorURI.isCommentUrl()); assertEquals(6753486, lorURI.getMessageId()); assertEquals(6753612, lorURI.getCommentId()); assertEquals("https://127.0.0.1:8085/news/debian/6753486#comment-6753612", lorURI.canonize(canon)); assertEquals("https://127.0.0.1:8085/news/debian/6753486?cid=6753612", lorURI.formatJump(messageDao, canon)); } @Test public void test1n() throws Exception { LorURL lorURI = new LorURL(mainURI, url1n); assertTrue(lorURI.isTrueLorUrl()); assertTrue(lorURI.isMessageUrl()); assertTrue(lorURI.isCommentUrl()); assertEquals(6753486, lorURI.getMessageId()); assertEquals(6753612, lorURI.getCommentId()); assertEquals("https://127.0.0.1:8085/news/debian/6753486?cid=6753612", lorURI.canonize(canon)); assertEquals("https://127.0.0.1:8085/news/debian/6753486?cid=6753612", lorURI.formatJump(messageDao, canon)); } @Test public void test2() throws Exception { LorURL lorURI = new LorURL(mainURI, url2); assertEquals(6893165, lorURI.getMessageId()); assertEquals(-1, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(lorURI.isMessageUrl()); assertTrue(!lorURI.isCommentUrl()); assertEquals("https://127.0.0.1:8085/forum/talks/6893165?lastmod=1319027964738", lorURI.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/talks/6893165", lorURI.formatJump(messageDao, canon)); } @Test public void test3() throws Exception { LorURL lorURI = new LorURL(mainURI, url3); assertEquals(6890857, lorURI.getMessageId()); assertEquals(6892917, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(lorURI.isMessageUrl()); assertTrue(lorURI.isCommentUrl()); assertEquals("https://127.0.0.1:8085/forum/general/6890857/page2?lastmod=1319022386177#comment-6892917", lorURI.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/general/6890857?cid=6892917", lorURI.formatJump(messageDao, canon)); } @Test public void test4() throws Exception { LorURL lorURI = new LorURL(mainURI, url4); assertEquals(-1, lorURI.getMessageId()); assertEquals(-1, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(!lorURI.isMessageUrl()); assertTrue(!lorURI.isCommentUrl()); assertEquals("", lorURI.formatJump(messageDao, canon)); } @Test public void test5() throws Exception { LorURL lorURI = new LorURL(mainURI, url5); assertEquals(-1, lorURI.getMessageId()); assertEquals(-1, lorURI.getCommentId()); assertTrue(!lorURI.isTrueLorUrl()); assertTrue(!lorURI.isMessageUrl()); assertTrue(!lorURI.isCommentUrl()); assertEquals("", lorURI.formatJump(messageDao, canon)); } @Test public void test6() throws Exception { LorURL lorURI = new LorURL(mainURI, url6); assertEquals(-1, lorURI.getMessageId()); assertEquals(-1, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(!lorURI.isMessageUrl()); assertTrue(!lorURI.isCommentUrl()); assertEquals("", lorURI.formatJump(messageDao, canon)); assertEquals("https://127.0.0.1:8085/search.jsp?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on", lorURI.canonize(canon)); } @Test public void test7() throws Exception { LorURL lorURI = new LorURL(mainURI, url7); assertEquals(-1, lorURI.getMessageId()); assertEquals(-1, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(!lorURI.isMessageUrl()); assertTrue(!lorURI.isCommentUrl()); assertEquals("", lorURI.formatJump(messageDao, canon)); assertEquals("https://127.0.0.1:8085/search.jsp?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on", lorURI.canonize(canon)); } @Test public void test8() throws Exception { boolean result = false; try { LorURL lorURI = new LorURL(mainURI, failurl8); } catch (URIException e) { result = true; } assertTrue(result); } @Test public void test9() throws Exception { boolean result = false; try { LorURL lorURI = new LorURL(mainURI, failurl9); } catch (URIException e) { result = true; } assertTrue(result); } @Test public void test10() throws Exception { boolean result = false; try { LorURL lorURI = new LorURL(mainURI, failurl10); } catch (Exception e) { result=true; } assertTrue(result); } @Test public void test11() throws Exception { boolean result = false; try { LorURL lorURI = new LorURL(mainURI, failurl11); } catch (Exception e) { result=true; } assertTrue(result); } @Test public void test12() throws Exception { LorURL lorURI = new LorURL(mainURI, url12); assertEquals(1948661, lorURI.getMessageId()); assertEquals(1948668, lorURI.getCommentId()); assertTrue(lorURI.isTrueLorUrl()); assertTrue(lorURI.isMessageUrl()); assertTrue(lorURI.isCommentUrl()); assertEquals("https://127.0.0.1:8085/forum/security/1948661?cid=1948668", lorURI.formatJump(messageDao, canon)); } @Test public void test13() throws Exception { String url13_1 = "http://www.linux.org.ru/view-news.jsp?tag=c%2B%2B"; String url13_2 = "http://www.linux.org.ru/view-news.jsp?tag=c++"; String url13_3 = "http://www.linux.org.ru/view-news.jsp?tag=c+c"; LorURL lorURI1 = new LorURL(mainLORURI, url13_1); LorURL lorURI2 = new LorURL(mainLORURI, url13_2); LorURL lorURI3 = new LorURL(mainLORURI, url13_3); assertEquals("https://127.0.0.1:8085/view-news.jsp?tag=c++", lorURI1.canonize(canon)); assertEquals("https://127.0.0.1:8085/view-news.jsp?tag=c%20%20", lorURI2.canonize(canon)); assertEquals("https://127.0.0.1:8085/view-news.jsp?tag=c%20c", lorURI3.canonize(canon)); } @Test public void test14() throws Exception { String url14_1 = "https://www.linux.org.ru/jump-message.jsp?msgid=6890857&cid=6892917"; String url14_2 = "https://127.0.0.1:8080/jump-message.jsp?msgid=6890857&cid=6892917"; LorURL lorURI1 = new LorURL(mainLORURI, url14_1); LorURL lorURI2 = new LorURL(mainURI, url14_2); assertEquals(6890857, lorURI1.getMessageId()); assertEquals(6892917, lorURI1.getCommentId()); assertTrue(lorURI1.isTrueLorUrl()); assertTrue(lorURI1.isMessageUrl()); assertTrue(lorURI1.isCommentUrl()); assertEquals("https://127.0.0.1:8085/jump-message.jsp?msgid=6890857&cid=6892917", lorURI1.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/general/6890857?cid=6892917", lorURI1.formatJump(messageDao, canon)); assertEquals(6890857, lorURI2.getMessageId()); assertEquals(6892917, lorURI2.getCommentId()); assertTrue(lorURI2.isTrueLorUrl()); assertTrue(lorURI2.isMessageUrl()); assertTrue(lorURI2.isCommentUrl()); assertEquals("https://127.0.0.1:8085/jump-message.jsp?msgid=6890857&cid=6892917", lorURI2.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/general/6890857?cid=6892917", lorURI2.formatJump(messageDao, canon)); } @Test public void test15() throws Exception { String url15_1 = "https://www.linux.org.ru/forum/linux-org-ru/6944260/page4?lastmod=1320084656912#comment-6944831"; String url15_2 = "https://127.0.0.1:8080/forum/linux-org-ru/6944260/page4?lastmod=1320084656912#comment-6944831"; LorURL lorURI1 = new LorURL(mainLORURI, url15_1); LorURL lorURI2 = new LorURL(mainURI, url15_2); assertEquals(6944260, lorURI1.getMessageId()); assertEquals(6944831, lorURI1.getCommentId()); assertTrue(lorURI1.isTrueLorUrl()); assertTrue(lorURI1.isMessageUrl()); assertTrue(lorURI1.isCommentUrl()); assertEquals("https://127.0.0.1:8085/forum/linux-org-ru/6944260/page4?lastmod=1320084656912#comment-6944831", lorURI1.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/linux-org-ru/6944260?cid=6944831", lorURI1.formatJump(messageDao, canon)); assertEquals(6944260, lorURI2.getMessageId()); assertEquals(6944831, lorURI2.getCommentId()); assertTrue(lorURI2.isTrueLorUrl()); assertTrue(lorURI2.isMessageUrl()); assertTrue(lorURI2.isCommentUrl()); assertEquals("https://127.0.0.1:8085/forum/linux-org-ru/6944260/page4?lastmod=1320084656912#comment-6944831", lorURI2.canonize(canon)); assertEquals("https://127.0.0.1:8085/forum/linux-org-ru/6944260?cid=6944831", lorURI2.formatJump(messageDao, canon)); } @Test public void testForumatUrlBody() throws Exception { // url == mainURL и mainURL host:port LorURL uri1 = new LorURL(mainURI, "http://127.0.0.1:8080/forum/security/1948661?cid=1948668"); assertEquals("127.0.0.1:8080/...", uri1.formatUrlBody(10)); assertEquals("127.0.0.1:8080/fo...", uri1.formatUrlBody(20)); assertEquals(20, uri1.formatUrlBody(20).length()); assertEquals("127.0.0.1:8080/forum/security/1948661?cid=1948668", uri1.formatUrlBody(80)); // url == mainURL и mainURL host LorURL uri2 = new LorURL(mainLORURI, "https://www.linux.org.ru/search.jsp?q=%D0%B1%D0%BB%D1%8F&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"); assertEquals("www.linux.org.ru/...", uri2.formatUrlBody(10)); assertEquals("www.linux.org.ru/...", uri2.formatUrlBody(20)); assertEquals(20, uri2.formatUrlBody(20).length()); assertEquals("www.linux.org.ru/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_usertop...", uri2.formatUrlBody(80)); assertEquals(80, uri2.formatUrlBody(80).length()); // unescaped url == mainURL и mainURL host LorURL uri3 = new LorURL(mainLORURI, "https://www.linux.org.ru/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"); assertEquals("www.linux.org.ru/...", uri3.formatUrlBody(10)); assertEquals("www.linux.org.ru/...", uri3.formatUrlBody(20)); assertEquals(20, uri3.formatUrlBody(20).length()); assertEquals("www.linux.org.ru/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_usertop...", uri3.formatUrlBody(80)); assertEquals(80, uri3.formatUrlBody(80).length()); // unescaped url != mainURL и mainURL host LorURL uri4 = new LorURL(mainLORURI, "https://example.com/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"); assertEquals("https:/...", uri4.formatUrlBody(10)); assertEquals(10, uri4.formatUrlBody(10).length()); assertEquals("https://example.c...", uri4.formatUrlBody(20)); assertEquals(20, uri4.formatUrlBody(20).length()); assertEquals("https://example.com/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_user...", uri4.formatUrlBody(80)); assertEquals(80, uri4.formatUrlBody(80).length()); // escaped url != mainURL и mainURL host LorURL uri5 = new LorURL(mainLORURI, "https://example.com/search.jsp?q=%D0%B1%D0%BB%D1%8F&oldQ=&range=ALL&interval=ALL&user=&_usertopic=on"); assertEquals("https:/...", uri5.formatUrlBody(10)); assertEquals(10, uri5.formatUrlBody(10).length()); assertEquals("https://example.c...", uri5.formatUrlBody(20)); assertEquals(20, uri5.formatUrlBody(20).length()); assertEquals("https://example.com/search.jsp?q=бля&oldQ=&range=ALL&interval=ALL&user=&_user...", uri5.formatUrlBody(80)); assertEquals(80, uri5.formatUrlBody(80).length()); } @Test public void testBadId() throws Exception { LorURL uri = new LorURL(mainLORURI, "http://www.linux.org.ru/forum/talks/12345678910"); assertTrue(uri.isTrueLorUrl()); assertFalse(uri.isMessageUrl()); assertFalse(uri.isCommentUrl()); } }