/* * Copyright 2007 Yusuke Yamamoto * * 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 twitter4j.auth; import twitter4j.*; import twitter4j.conf.ConfigurationBuilder; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Map; /** * @author KOMIYA Atsushi - komiya.atsushi at gmail.com */ public class ApplicationOnlyAuthTest extends TwitterTestBase { private ConfigurationBuilder builder; public ApplicationOnlyAuthTest(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); builder = new ConfigurationBuilder(); builder.setUseSSL(true); builder.setApplicationOnlyAuthEnabled(true); } // --- Authentication public void testAuthWithBuildingConf1() throws Exception { // setup Twitter twitter = new TwitterFactory(builder.build()).getInstance(); // exercise & verify twitter.setOAuthConsumer(browserConsumerKey, browserConsumerSecret); OAuth2Token token = twitter.getOAuth2Token(); assertEquals("bearer", token.getTokenType()); Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); try { twitter.getAccountSettings(); fail("should throw TwitterException"); } catch (TwitterException e) { assertEquals(403, e.getStatusCode()); assertEquals(220, e.getErrorCode()); assertEquals("Your credentials do not allow access to this resource", e.getErrorMessage()); } } public void testAuthWithBuildingConf2() throws Exception { // setup builder.setOAuthConsumerKey(browserConsumerKey).setOAuthConsumerSecret(browserConsumerSecret); Twitter twitter = new TwitterFactory(builder.build()).getInstance(); // exercise & verify OAuth2Token token = twitter.getOAuth2Token(); assertEquals("bearer", token.getTokenType()); Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); } public void testSettingAccessToken1() throws TwitterException { // setup builder.setOAuthConsumerKey(browserConsumerKey).setOAuthConsumerSecret(browserConsumerSecret); OAuth2Token token = new TwitterFactory(builder.build()).getInstance().getOAuth2Token(); // exercise & verify ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setUseSSL(true); cb.setApplicationOnlyAuthEnabled(true); Twitter twitter = new TwitterFactory(cb.build()).getInstance(); twitter.setOAuthConsumer(browserConsumerKey, browserConsumerSecret); twitter.setOAuth2Token(token); Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); } public void testSettingAccessToken2() throws TwitterException { // setup builder.setOAuthConsumerKey(browserConsumerKey).setOAuthConsumerSecret(browserConsumerSecret); OAuth2Token token = new TwitterFactory(builder.build()).getInstance().getOAuth2Token(); // exercise & verify ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setUseSSL(true); cb.setApplicationOnlyAuthEnabled(true); cb.setOAuthConsumerKey(browserConsumerKey); cb.setOAuthConsumerSecret(browserConsumerSecret); cb.setOAuth2TokenType(token.getTokenType()); cb.setOAuth2AccessToken(token.getAccessToken()); Twitter twitter = new TwitterFactory(cb.build()).getInstance(); Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); } public void testInvalidation() throws Exception { // setup builder.setOAuthConsumerKey(browserConsumerKey).setOAuthConsumerSecret(browserConsumerSecret); Twitter twitter = new TwitterFactory(builder.build()).getInstance(); OAuth2Token token = twitter.getOAuth2Token(); // exercise twitter.invalidateOAuth2Token(); try { twitter.getRateLimitStatus(); fail("show throw IllegalStateException"); } catch (IllegalStateException ignore) { } twitter.setOAuth2Token(token); try { twitter.getRateLimitStatus(); fail("should throw TwitterException"); } catch (TwitterException e) { assertEquals(401, e.getStatusCode()); assertEquals(89, e.getErrorCode()); } } public void testRequiringSSL() { // setup ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setUseSSL(false); cb.setOAuth2TokenURL("http://api.twitter.com/oauth2/token"); cb.setApplicationOnlyAuthEnabled(true); Twitter twitter = new TwitterFactory(cb.build()).getInstance(); // exercise & verify twitter.setOAuthConsumer(browserConsumerKey, browserConsumerSecret); try { twitter.getOAuth2Token(); fail("should throw TwitterException"); } catch (TwitterException ignore) { } } public void testAuthWithPropertyFile() throws Exception { String filename = "./twitter4j.properties"; try { // setup writeFile(filename, "enableApplicationOnlyAuth=true", "http.useSSL=true", "oauth.consumerKey=" + browserConsumerKey, "oauth.consumerSecret=" + browserConsumerSecret ); // exercise Twitter twitter = new TwitterFactory(new ConfigurationBuilder().build()).getInstance(); OAuth2Token token = twitter.getOAuth2Token(); assertEquals("bearer", token.getTokenType()); // verify Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); } finally { deleteFile(filename); } } public void testSettingAccessTokenFromPropertyFile() throws Exception { String filename = "./twitter4j.properties"; try { // setup builder.setOAuthConsumerKey(browserConsumerKey).setOAuthConsumerSecret(browserConsumerSecret); OAuth2Token token = new TwitterFactory(builder.build()).getInstance().getOAuth2Token(); writeFile(filename, "enableApplicationOnlyAuth=true", "http.useSSL=true", "oauth.consumerKey=" + browserConsumerKey, "oauth.consumerSecret=" + browserConsumerSecret, "oauth2.tokenType=" + token.getTokenType(), "oauth2.accessToken=" + token.getAccessToken() ); Twitter twitter = new TwitterFactory(new ConfigurationBuilder().build()).getInstance(); // exercise & verify Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search"); RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets"); assertNotNull(searchTweetsRateLimit); assertEquals(searchTweetsRateLimit.getLimit(), 450); } finally { deleteFile(filename); } } private void writeFile(String filename, String... lines) throws Exception { File file = new File(filename); file.delete(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); try { for (String line : lines) { writer.write(line); writer.newLine(); } } finally { writer.close(); } } private void deleteFile(String filename) { File file = new File(filename); file.delete(); } }